home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume24 / psroff3.0 / part05 < prev    next >
Encoding:
Internet Message Format  |  1991-10-09  |  55.5 KB

  1. Subject:  v24i100:  psroff, Troff to PostScript filter, Part05/19
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4.  
  5. Submitted-by: Chris Lewis <clewis@ferret.ocunix.on.ca>
  6. Posting-number: Volume 24, Issue 100
  7. Archive-name: psroff3.o/part05
  8.  
  9. #! /bin/sh
  10. # This is a shell archive.  Remove anything before this line, then feed it
  11. # into a shell via "sh file" or similar.  To overwrite existing files,
  12. # type "sh file -c".
  13. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  14. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  15. # Contents:  fonts.lj/S.28.pk.UU man/troff2ps.1.S troff2.c
  16. #   widths/genext.S
  17. # Wrapped by clewis@ecicrl on Fri Apr  5 20:55:58 1991
  18. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  19. echo If this archive is complete, you will see the following message:
  20. echo '          "shar: End of archive 5 (of 19)."'
  21. if test -f 'fonts.lj/S.28.pk.UU' -a "${1}" != "-c" ; then 
  22.   echo shar: Will not clobber existing file \"'fonts.lj/S.28.pk.UU'\"
  23. else
  24.   echo shar: Extracting \"'fonts.lj/S.28.pk.UU'\" \(17561 characters\)
  25.   sed "s/^X//" >'fonts.lj/S.28.pk.UU' <<'END_OF_FILE'
  26. Xtable
  27. X !"#$%&'()*+,-./0123456789:;<=>?
  28. X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
  29. Xbegin 644 fonts.lj/S.28.pk
  30. XM]UD``<``````````!":N``0FKH#Q(0```%I3=/=6URU_3575357535753575
  31. XM]-5=5-5=5-5=5-5=7TU5U4U5U4U5U4U5U4U5U?3575357535753575]-5=5-
  32. XM5=5-5=5-5=7TU5U4U5U4U5U4U5U4JBL4J3L%IVKTIWKEIHKDIB)JQ:0S:L2D
  33. XM-6JEHS9JI*UJI*YJA:YJA+!J9;!J9+%J5;)J1+-J-;3VHDM6H5MFH$MVGUN&
  34. XMGDN6G5NFG$NVFUNVFTO6F5O6F4OVF$OVEUOVETP6E5P6E4PVDUPVDTQ&DEQ?
  35. XM:13':%QVA,AG7)9DRF5<MD3,8US?8DSF%<_Y'1^-)]1M1=9-8[JA"R0```"-
  36. XM>#3V,KJQW+'*N=2XQ;[.O<'"RL&]Q\7%NLG"M8L+C,O[*UBVLGNKRQNGM*M+
  37. XMBYL+YK*;BWMZP6L(O+:UG$:7O[:SG&:&PK6QC)5VQ+6HRU9<>TB,U%7)M&C.
  38. XM5%RK1(T$-<RT*-%27-O--"3/NM1"30N-5!71M]6=.UUXT[38C4M->-6TUHUK
  39. XM35C7M-2-BTTXU[73G5M]%135N-!"34NL]"33O,U271@K3,4TT(2TRE1<Z&M,
  40. XME53-B+3'5ERXJUQ&=<F+&UPFAL:;.VOWEL2;6VO(L&P:M[>XFR:^L+FXM*M'
  41. XMNK&\NGLK:+6RO\RXL(M<+)NL7%Q[W!RL+!O<Z^Q;C4N<JQW+&Z"`0B4```!L
  42. XM6DSV0K,MR->3U/E=+BE]#YG0XI?2^5U)/7C<(`7>WQ`!'QWP!=XMR->3U/E=
  43. XM+BE]#YG0XI?2^5U)/7C<*S"PW"8```!O6C3V,L>P%JQ,;>PL'+V<7`SM7'K2
  44. XMT<F=7.P,:WQ<N\B<'$R*R8Q</&G*?)PL2,QLS!PHS&SL'`C,;1P*?.73P(?.
  45. XM75MWSUUK5]!-BT?/78P"?03:Q]%-O%T5W,317=PM)-[!TTW\#30!"]/T`1O2
  46. XM0!*]%`$L#00!+!ST`1PL]=_$STW\7.3>Q\U=QRP,U-MTO-3;=;S%V7>\Q==X
  47. XMP,M=9ZP,M=.,#!RET8PL');/C$PLALR<;#QVR:R,3&?%O+Q<2;P,[+K2T<G`
  48. XMSM7'P<O9Q</&WL/'H!:PH+$J````;T!"Z3TCW#%MFRU[35MM.1G1DYSY6<V7
  49. XMG+F9R9L)QYLIQ9M)PYMIP9N)OYNIO9O(O8OHNXP(N8PHMXPYM9Q)LYQIL9R)
  50. XMJ<J8G,EISI2="2G2M]2UUK/8L=KZVK'8L]:UU+?2DIT)2<Z6G,F)RIJ<B;&<
  51. XM:;.<2;6<.+>,*+F,"+N+Z+V+R;V;J;^;B<&;:<.;2<6;*<>;"<F9G+EYS96<
  52. XM^3G1D9T[;5M->RV6(]PQ@`XM````;U(&\A\=<0_QUQ"@7SP```!0/3KW.=\M
  53. XMY=M]F=>=>=>=:M:M:M:M:=>=>=:M:M:M:M:=>=:M:M:M:M:=>=>=>=CXVYVY
  54. XMVYVYVZVJVJVJVYVYVZVJVJVJVYVYVYVZVJVJVJVYVYVYVYVWW5WR$*!?/0``
  55. XM`%`].O<Y$M]=U]N=N=N=N=NMJMJMJMN=N=N=NMJMJMJMN=N=NMJMJMJMN=N=
  56. XMN=N=OXV)UYUYUYUJUJUJUJUIUYUJUJUJUJUIUYUYUJUJUJUJUIUYUYUYV7VU
  57. XMWBWPN$5#````5T=/^$[B`G3P*,'"S\7"P-3!P[UZP[V)P[VGP_O;?"O<;"XK
  58. XMW5PKWDPOO>7!Y+WTP>*P$$X!#`L!_!`=Q`$>3:U0<-!$````=&)1]U"F;3^`
  59. XMT8+/^$S?ALOXC)BL?V&%Q6.%Q%6$PV6%P?9X6_:!A;Y8.$O6@X6[]H6%N6AX
  60. XM6X:(A+=HF%MEBX2U:+A;/VC86Q:/A;!9&$KVD86M]I.%JVE86J67A*EI>%J%
  61. XMF82G:9A:7VFX6C:=A:)9^$H6GX6?]J&%G6HX6<6EA)MJ6%F?:GA9=JF%EFJH
  62. XM25:KA91:V$DVK861]J^%CVL86.6SA(UK.%B_:UA8EK>%B%N82':YA89;N$A6
  63. XMNX6#]KV%@?TGU%_6/]@0SK#>2````&Q:4?=/VL("O,`BU`'-@!?#P,,!+!R,
  64. XM'?O.O<O2O9K6K6O8O3K<K1K>K/H!"LV@$JRZ`4K)H!:L>@&*Q;`8O#L!J\*@
  65. XM'*P;`<N_L!ZY^P(+?``@P&L"*U_``BP$L"2SP`),`N+`=-Y'P"N$WDBQZ<"`
  66. XM%HS/A-Y(P!N$WDBRP'3>1\`OP`),`_L"2TP`(L!?L"*W^P(+G[`>N_L!R\&P
  67. XM&KPZ`:K%H!BL:P%KQ[`4O)L!*\NP$+S;WKT*W*T[V+U;UKV+TKV\#.P-[!R,
  68. XM$!+#P,,!?8`<U`(LP"O"VI#G2P```&!24?E0O4`38!'BC?^@W>*BV^*DV?IM
  69. XM>HUE&BUE*AU6*BU%.BTV2BTE6BTE:AT6:BT%>BT%BASVBBSEFBS6H*+,6AHL
  70. XMQ:*ARVHJ+*6CHLI:2AR?6EHL=J:BQEIZ+&6HH<5JBBQ%J:+#:JHL):NBPEK*
  71. XM'!:LHL!:VBP%KJ&_:NHKY:^BO6L**\6QHKQ;*ANVLJ*Z6SHKEK2BN%M:*X6V
  72. XMH;=K:BMEMZ*V6XH;5KBBM%N:*S:ZHK);NBLEO*&Q:\HK!;VBL%OJ&O];^BK6
  73. XMP**K?`HJN,"AJIOZ.GH[VDHZBYJ'Y+"NMI`N3@```%U-3OA-'H`1)==1XEV9
  74. XMY=M``COE3!2PZ,FPY4P4`"U>5-N>/946U6+H`1&X)%````!H6$_X3@`9RL'>
  75. XMP<G`WL#+X"2]Z\O!W,')P]K#KDU\;7"`T5(```!E4T_W3AU4_63]=):PGEEK
  76. XM:7:6N)1Y6ZDGEKN0B6NY"):[B0EKJ)&5NWDI6[:2EKII.6NEE):Y:4EKE965
  77. XMN5E9:Y26EKA)>6MTF):V29E;=)F5MDF9:U2:ELR6S);,E<R6S);,ELR6S)7-
  78. XME<R6S);,E<V4SI+/D=&-&-&-&-&-&-&-&-&+9)Z+=)V+A)R+A)R+E)N+I)J+
  79. XMM)F+M9B+Q9>+QI:+U9:+UI6+YI2+YY.+]Y*+^)&+^0D(OY"0B^DHB]E'B[EV
  80. XMBUGEU4UCXM9=5+!N4P```#@R/_DRT,/2S,O1Q]3#PJO"O%?!K+/`G<C=C=?>
  81. XM?>?>?>]][WWN)][DC>^=VMR]R]O!V</8Q-?%UL;5Q]3(T\K1R]'+T<O1RM+)
  82. XMT\C5QM;$V,/9P=N]WYWHWO??;???;457U<36P]C!W(QPL()4````;%I0]T_"
  83. XMD!"<W$V</(R-3(Q,S1R\'.SLZ]#,T)TLK2?4R-1=;&UDU\37.L'"P\+`HHQ<
  84. XM'!P,6";)O`O)86R[NLN\VJK-K.J9SJSZ><^M"7C043TH:=$]CX6`*O@X`L<W
  85. XM`M<H`M@7`O]Q<"_"`QX\$#'``S[:L#+!`OQ0(>3=S,"Q50```&533_=.V.0!
  86. XML"K3`XP#OIH#C6`M`2`C`:`<`@`7TSI-,!+1BIT=W0NLT-J]&M*]?-*M/-2]
  87. XM2M6]'-6M;+S6K7R<UZV,?\V*V<7-FMK#_0V:VM`LVJV\'FT-JMO0'-JMO"_0
  88. XMV:VM`\V:VL7\V*V<?->MC)S6K7R\U:ULT;U*U;U,TJT\U[T:TKVM"ZS0W=&*
  89. XMG1`2TSI-,!<"`!P!H",!("W6`WZ:`[P#C3`JY`&]D+"K5P```&Q:3_=.S>3<
  90. XM`BQ`,,`#/HK=K1K1H<'/K/T,VLW#'#S*S,-<'+K+P:P,JLK`P;RJRKP_O)K)
  91. XMO%K)K)K&^\BLB\?HK(K(K(O'K'O)XZQZQZRKQJQKRZQJQJS+Q:Q;S?K%K%K/
  92. XMK$K$K0O#K#O1K#K#K3K"K"K5K!K!K7K`K`K9JZNMNYJ;W<!Z?``0P%I<`!/#
  93. XM&APP%MH!O4`AS@*<0#'IH#/``PQ`(N3<S:#J6````&554/A/Q[8!/"VLC4SL
  94. XMZWL+?)M+JTQK+`LL.RQ+*_LLBRO++*LKJQSK&WLM"RM++2LK+[+4LK"RUK*;
  95. XM+8LGL]BS:RVK);/:LT^RW+(_L]RS+GLMZR*SW+,^*RW+)+/:LU^RVK)_LMBR
  96. XMFQV+&K+6LK"QUK&R^QU+&TL=*QMOL-*PN+#0L+JM"KRLZKZ<Z;^LRL"<R<*<
  97. XMJ<2,J,;XR(R(QHMTM'QGM(M7Q'M4%+1\1[1"2U;$:U0O2V;":V0DMUPEMT-+
  98. XM9L!K9$2W7`6W1%MEP%ME1K5<!;5DP;[!7DP+[`?[^^OXOL"^0'C260```'=D
  99. XM4?=.!P':/]A?UGU(']*#^%O6A86[:'A+M8B%N6B82Y6*A;=HOX6U:-A;-H^$
  100. XMLUD(6Q:1^%KVDX6M:5A*U9:%JVEX2J:8A:EIGX6G:;A:5IV$I5GH6C:?^%H6
  101. XMH86?:CA)]:2%G6I?A9MJ>%F6J8296JA9=JN$EUK(65:M^%DVKX61:QA)%;*%
  102. XMCVL_A8UK6%BVMX2+6XA8EKF$B&NH6':[^%A6O86#:_A(-<"%@6P?A7;#A5;%
  103. XMA%7&A3;'^%%LF*R_B,WX;/^$T8+3^`U6I[#=6@```$Q#4O=0T\$!;)`0S=S1
  104. XMV+K`U8Q:TWR:T&S9SFSYS%TIRTU)R5U8R)TIQ_K2G%^].<3[U)PZU:PXUJPW
  105. XMUZ`=YKURQ[SL7!O+RKO)SIO'T8O%P,%VP,2\5EP,*\E4P,&LQ3P+O.0L&JT4
  106. XM'`JM)!P)O3Q(O4Q'O6PG^]?":]C"7\#8P5P-G!7`V<!<'9P%P-JV_`V<!<'9
  107. XMML#9P&_`V;?`V+B]FXO8N;V*J]>ZO7J_O6K!K5K"K4K#O2K%K1K'K/K)G.K*
  108. XMK+O,K)O.O$P-'!K"U-77TMO.W\D!;!V`@*Q<````;U)J\E#433?0D,Z2S)3*
  109. XME<F4RI3*E,J4RI3*E,F5R97)E<F5R97)E<F4RI3*E,J4RI3*E,F5R97)E<F5
  110. XMR97)E<F4RI3*E,J4RI3*E,J4RI3+D\V1SY/-E<V5SI3.E,Z4SI3.E,Z4SI7-
  111. XME<V5S97-E<V5SI3.E,Z4SI3.E,Z4SI7-E<V5S97-E<V5SI3.E,Z4SI3.E,Z4
  112. XMSI3.E,Z2T)#2?40`9TU2#_'7$("K7@```&]2:O)0%-1]*0T)+.E,V5SI3.E,
  113. XMZ4SI3.E,Z4SI7-E<V5S97-E<V5SI3.E,Z4SI3.E,Z4SI7-E<V5S97-E<V5SI
  114. XM3.E,Z4SI3.E,Z4SI3.E<V3SY'-D\N5R97)E,J4RI3*E,J4RI3)E<F5R97)E<
  115. XMF5R97)E,J4RI3*E,J4RI3)E<F5R97)E<F5R97)E,J4RI3*E,J4RI3*E,J4S)
  116. XM+.D-!]-`!L#5(/\=<:@*7P```#HZ!0#E#W"PN&$```!=2C3W,M"P'\<!C,`4
  117. XMT`$,%[WKP9RCPKQ*QTP:QZQDP)RIQ5JLR<1*K.G#2:SYPECZT9P4BM*K5ZU)
  118. XMM'O4FE>M6I1[U:A7K7F$>]>75[UY='O8EE>]B56+V)5(P-BC6+V:)9O9HDJ]
  119. XMFA6KV<.ZVL+`K;P,&MN\+ZVZP^*MN<6=JL6=F\6M;"Q9U</&G2<9QIT(*;1)
  120. XMS86959R::91ZQ+F(6+K!P(1[TL/%P<['P\7(R\')P--XL1AB````44EG^E`!
  121. XM3``>Q@&,L!3.`1N+W9PYVXQXV(R8UWS(U6SXTVT(TETHT5TYSUU)SEU9S5UI
  122. XMS%UYS$V)RUUZREV)RTV9REV9RDV:R5V9RDV:R5V9RDV9REV9RDV9RTV)RUUY
  123. XMS%Q,))S4P]#.3"S\]<'/T$PL_03#S\],3/S5Q<))S$V9R_3:G)7;G(3<G(]-
  124. XMRL9=RL9-VL;TW;Q%W;Q.)-Z\-=W`P^)-Z\-=W`PUW;Q$WKQ$W<##7=O$;<O$
  125. XM;;O%;;K%?:O%C9K&C8K'C7K'K6G(0EU*R$)M*LE#;0G*5&S:RT9\JLQ'C&O-
  126. XM2*P,#.6=/03`S]),++U$Q<767-'>XD`H4"CB0"A0*.)`*%`HXD`H4"CB0"DP
  127. XM*I"78P```$M%2OHRJJ#.I;@Z2JM4HZRS6AL+%*&RKUFUKDFVK5BXJUBF6EJD
  128. XMFAI**H6)JIJ$B*Z*97>Q>F2&LWI%=K5J1(6W:B5UN5HDA;I*%82[6@24O$E9
  129. XM.]6$RE=<M'3,1ES%5,Y$7.]$3/0USU)-%!7104TITN*-/B?4]M7B76]-;B75
  130. XM;5]=7C;4XVU.-M3C;575]M9-<[&PQ60```!!-5/X4-6MS$U\C4RM&GC/C!;-
  131. XM?%7+?'7)?(7(?*3(?++(<!&`$7`1Y(`1D!"M^][`W<+;P]O$VL3:Q=G%V<7:
  132. XMQ-K$ULC3R]#.SK/"RZ?"R:K`R)P<#%K#O$K%K#K'K"G)G!K*C`K,>ZS7J\YJ
  133. XMK/:;SVFM!H^]%7O25_O19L#15_O25[T6>]%7O25[T6>]%8O0:?K06JSUNLYK
  134. XMK.7!G-;!G-7#G+7$G*;%G(;'C';(G%;*K!?,N8S\W1RM7&VL$!,=(+!-90``
  135. XM`#PK,_<QS\/,R,C+QLW$SL/"S\'1P-*].M2M2M2M2]/[T_O3^]/CV5V'YKU>
  136. XM.M;YUJUIU_G7G.&)RTBL=IK#F[F\'0Q<S)Q]#`P`H*!F````0CAH^%#'';/:
  137. XM3878Y$V5V4*RRKO'O,6]P[_!P,&"ML"&L<*-1]5]5]1]5]5]5]5]9M9M9M9]
  138. XM5]5]9M9]7WU7U??5]]7WU8U??5C5XGU8U>-]7EC5XIU?G4K3L-.M.QTK'1L]
  139. XM"TSK?,N<J\Q[[%P</"P</!PL+!Q+_'O,FYS;;/L]*PU)U>*-9]9M;WQ$LVQ6
  140. XML&QJ9LBYR[;.L]*;@,#!9P```$H_2ODRJ-N];-74TM'2U]#3S;I4F:>H5X>,
  141. XMEEB5?2ADF4;4E%J2;6A$N178@UO1V9),T-J22]#;D5O0VY%,S<D4R]V13+W-
  142. XM'+W9(\K>G4K>G4G>K3K>K3^=^=2=ZM.MZM/YWYU)WJTZWJT_G?G4G>K3K>K3
  143. XM^=^=2=ZM.MZM/YWYU)WJTZWJT_G?G4G>K3K>K3^=^=2=ZM2-^M1P$)UT`1D"
  144. XMCZ`H^0*/H"CY`H^@*/D"CZ`H^0*/H"CY`J<"Q-2PO6@```!$-5+W4-2-["V<
  145. XM77Q]2DC2B7T(M\Z,",N<)\J<.,F,5\B,:,:,>,6<><.<B<+YRHP9RXP*RYN<
  146. XMR:K,FIS9FLV?BLVGO-IZSJ]KSJ:L^O6\Z_2\^TO.M,#.M/O/M`%3XP%3`53[
  147. XMS[2\[`2\ZT^\^T^\ZUK/IOK.MJSJ>LVW^LVHG-J9S9J<RJG,FYRZP(RYP?C*
  148. XMG"G(G#G'G%C'C&C&C(?%C)C#G*?"G+C`C.>XT'F-*$K4Q]?%V<+>C4"P5VD`
  149. XM```V(S3U,L)-%\_YS?K-^<VLWBG-K-XIS:S>*<VLWYS:S?G-K-^<VLWYS:S?
  150. XMG(0:R$&<C#R$&<A1G(0IQU*,=3C&5(Q&6,-FC!>(J)E;O*PL?&P\J<>PKVH`
  151. XM``!4033U,L)`'WTWQYS[QIS,/$K*Q<2LC'Q)R(&\2<:#O#K%=:Q*PW>L2<-Y
  152. XMC%G!?`7&K`?8JVVII]N9;<IWW:5]^4@!"2@!''`2R0$-'8U-38T:C'T)P\+/
  153. XMG'O-K)K,K*K+G,G+G,K)K-G)K-G"3SG.G"0JS:P5*LVL%#G.G"0YSIP5*LZ<
  154. XM%#K.G`4YSYP$2<^;4ZT(M$K0F52=*'99TX5FG4Q7C6PX?8P;3<BPL+EK````
  155. XM54)1]D_"D!S"`8Q`%\0!G"`;P`&[`<^P'/L!S[`<^P'/L!R@'+`<H!S[`<^P
  156. XM'/L!R@'+`<H!S[`<^P'/L!R@'+`<H!S[`<^P'+`:P`&<$!C#`5Q0%'&P$G*P
  157. XM$72]]UO>=[VXB]J*K9B[UXP:UHPKU(Q*TXQ;T)QKSYR+S9R;S)RZRYS+R9SJ
  158. XMR)S[Q:T:Q*TKPKTKP;U+N]6ZO7M\#8ML#:I<#;M+W:.]ZRH!"QD!'`%P$[)0
  159. XM%I#`L6P```!71TKX,M=`-'`27>D!!]V=^-RM^-RMZ=SYWYV_K>K;^=^=OZWJ
  160. XMV_G?G;^MZMOYWYV_K>K;^=^=OZWJV_G?G;^MZMOYWYVZWJVZWJM/F=^<2*WJ
  161. XMM8K>JTFMVL2:W+Q(O<NTG-K+2<V="EG-C1I)T=5AF5G2TV.)2M/0=)=:UGEI
  162. XM1J`5G4NAV;TLE-72S0F+UXT?H##Y`P^@,/D##Z`P^0,/H##Y`P^@,/D#)P-$
  163. XM`T"PEFT```!(/3/V,KK61,?4<_Q].1R-*BQ]*:O3G`G3FZTJNM*<"=.<"=*<
  164. XM"M*<"M&L"=*<&=&L"M&<&M"<*=&<*="<*L^L*L^<.<^<2<Z<2LVL2LV<6<V<
  165. XM:<R<:LN<>LJ<B<J<F<F<FLB<JL><N<><R<6LRL2<ZL.<^<*M"<"M&KK2J:U)
  166. XMBM:5O7H[V<K;R-W%W\,!+``6<!F@MVX```!"-VC[4,8=H]E-==?D3878N,>]
  167. XMP<&^P[S%NL:YLDMKFQBQN['/L<^PT+#0L<^QT+#0L="PT+'0XK#0L=#BL-+B
  168. XML-&QT;#2L-*P6TOL6]Q;W$OL.]P[S$O(6VO(TXTXTWU'U/?4?4]]3WU/?4C4
  169. XMXGU(U/G3K3K2L-&RT+/.MLRXRKK(O,:^Q,##P<'#P</!PL+`Q+[&O,BYR[;.
  170. XMM-"QTYU(U.)\%;-\)[%L.P:,2\Q[G+M-&;2P@6\```!'.#3W,M"]W'ULS2T,
  171. XM[!>\R\&<F\2<>LB,6<J<*LR<"LVJK/F?K0IZTI:M.5O3I*U*.]2CK4ORO4OQ
  172. XMO5L;U,S4L?O5L;U,`;U+*M6R^M2SK4I*T[2M.E^M*GG1J)T*FLZKG-K!G+K"
  173. XMG*K$G(K&G%K)K!O+N,#/S]+,U\;=O1"@E7````!41S/Y,;7;L]^Q`0H!*0$X
  174. XM`4<!1P%'JQ6R6^BT2S2^>V2S2]:W6S2]6X6R6\6Y2S6[6Y6S6[2Z6S6[.[6R
  175. XM74XELUTVLUTUM%TULVTO:S;1XFM&T'M&T&M7SO>U?-][6,R+6<N+:,M[>,J+
  176. XM>,J+><B+B<B+BL:;BL:;BPQ)NJQ)NK#"JZL,+YO*PHOHPWOWQDP5N<"O<0``
  177. XM`$H\2O@R`7H"'4`<V`&-L!:FL!*KD!"=&=Z-2-V-6=N->=F-B=B-J=:-N=6=
  178. XMN=2=RM.-VM*=VOT9WJT)WZ_0G>O\G?O)WLNMZ\^=^[K>RZWKSYW[OZWKR=Z]
  179. XM"=ZM"MV]"MVM&=VM*MRM&]NM*]JM/-BM30UJU-'5K5T]*=>2;*V).&S8I-K:
  180. XMI=?<F-+?FJ`1^@)?D"7Z`E^0)?H"7Y`E^@)?D"7Z`E^0)W`I0"F@CW(```!3
  181. XM13/X,<#.OM*ZU;C7MMFUVK/;L]NSM)LL2QM;#"L+BPP*NZOZO9OJOYO*P)O)
  182. XMP9NYPXNJPYN9Q)N*Q)N)Q9MZQ9MYQIMYQ:MJQ9M_G&FWG%JVK%FW^<:;?YQ9
  183. XMN/G$FYG#F[C#B\C"F\C!F^B_F_B_C!>]G"B[G$BYG&BVG)FRK+J+'-P-&\U;
  184. XM?;L-`*!2<P```$-`,_DQM=2SV+'9K;G<C=?=?=>K1<:+=<5[E<1KM<1;M<1;
  185. XMQ<-;U<-+UL,[YM]M[B;>]][VWN)]WB?=^-U]WBC<^=SXW.*=OCG<C=??7,"P
  186. XMKW0```!00C3Y,L*-A<+!U(P,/2JL71J72,_`=8C.P&68SL!5J<W`1;G-P$3`
  187. XMG.LUP)SZ)<&="23!K1@DP9TW%<&=-Q3!K484P9U;P*U5(\&=9<:==,6M9<7Y
  188. XMUTQ:UTQ9UUQ*UTQ9V$Q9UUQ9UTQ:UEQ9UTQIUEQIUDQYU5QIUDQYU5QYU%R)
  189. XMU$RHTURIT5RYT%S)SUSIS5SYS%T9R6TYQVU:PWU\&)V<_=S`$,@!?`S@D0-U
  190. XM````5D5G]D_$/7]=;TUO76]-;UUO36]=;TUO76]-;UUO36]=;TSZG$L+ZVN+
  191. XMNTHU5J&QHH6:"NH*%**:N@HTHYJ9I%I8IYI5IHI)ITIXHYJ$J(H9J%J)F:E:
  192. XMF(FJ2JEIJTJX::I:N%FK6KDZ"K2LDYK$K)\IK%K)&@K$K9&:U*V1FL6LJJQ:
  193. XMR1^:U*V1FL6LH!FL6LDIK$K9**U*R3BL6LDYJUJY2:M*N@2:M*N5FJ6JEXJE
  194. XMJ9B:E*F:"*E*B:&:=:>:.*=:::6*9*::>*5*2@J8HUHJ"LFA6@H:Z@E)H;&B
  195. XM9%H[6ZN;:]L<2ISO76]-;UUO36]=;TUO76]-;UUN)-<\,+#L=@```%E)2O@R
  196. XMB@(<,!4FQ@$D3)WU-DP=U36,#;4UJ]I42\#854P,#65CPKU5S,#37.O270O0
  197. XM71O/73O-74O,76O*77O)79O'7;K&7<O$7>K#7?O!4!"\!0$KI0$[E0%:A0%K
  198. XM5@&*1@&;)@&Z%@',0!W#`?P0(,`"*@(_L".@(L`"#!`?PP'<0!QAH!MBL!ED
  199. XMH!AEL!98H!59L!-:L!)<"P$%P;WUPZWEQ+W%QJVUQ[V5R;UURKUES+U%S;TU
  200. XMS[T5T+T%TKSET\#,75O"-EUL#`15V,"T1=JZ4UV\"%-=W!1C7?R40!+&8@%<
  201. XM,"&HP3)W````7U%G^4\"PP0.)`/U`_XD`_4#_B0#]0/^)`/U`_XD`_4#_B0#
  202. XM]0/^)`/U`<C>3771T-Q-6,TMM-2JU-E=2I=(V$U,=8C734QEF-=-3%6IU5U,
  203. XM1;G535Q$R=5-:S7)U4UZ)="=1=B230K43:@DT)U4VW%="=5-MQ30K47<84T)
  204. XMU4W;RM5-U2/0G63=75G57>34K53>74^=9-Y-2M5=Y-2=9-Y=.M9-Y-2==-Y-
  205. XM2=9=U=2=9-Y-2M9-U=2==-Q=6=9=Q=6=9-Q=;YUDVUUYU5VEV)U4VEV9U4V5
  206. XMVIU4V%VYU%UUW9TTUFWITTU6`0G233<!*=!=)P$[M-%P%LE,@!G'2:`;TQ5<
  207. XM`?`6`C`2`HW`,=(#CB0#]0/^)`/U`_XD`_4#_B0#]0/^)`/U`_0$$P(0H,IX
  208. XM````6DTT^C(!I;0]F+-->K%=>K!=>QE=BQE-FQA=FQ==JQ=-RP9=VE7?E4`1
  209. XMA%`2=$`3<U`48T`58TQ#PU-<-<)33#?!4TPHP5)<*,%#3#C!0TPIP4-,*,%2
  210. XM7"C!0TPXP4-,*,%33"C!1$PHP%1,)\%43"?`55P6P&5<%K]F7`;`9FOGOV=K
  211. XMV;UH>[J[B'NK&YB8M[.WFPBUM;2PL*L+JPL;&S.T&Q2TL\,L.TPDP;;`7`M[
  212. XM][ZYO8O+RZL+J^N+*WPK.WL\:KN;\-`.>0```!T$=/16$A`!RA(0L$=Z````
  213. XM-"-T^%;1;-K+C.;/;0;0;0]M#VT.UVT/;0]M!M!M!M!L]LY\SXTWTVTVTFTF
  214. XMTFTO;2]M+M=M+VTO;2;2;2;3;2C1K1:X27L````T(W3X5GT*TGTGTGTFTFTO
  215. XM;2]M+M=M+VTETFTFTETUTVTUTWT_C,?/70;07171;0;171]M#M=M#VT/;0;0
  216. XM;/?.?.?+K-?0H(%\````;UH[]CFWH!`K6UW$LKK92POM=)P=9(Q-1'QM-&R=
  217. XM!5LXM<]5L+.SSE2KBRRU2;RQRE1[^QR&-\*PQF1L2QQ&1L:PPG-LBQOW1<JQ
  218. XMO)1<RQN*1<ZSL[!5S[6+-5T,EDT\9TU,2$UL&4U[ZP39NK)-RUM2`0H`A9`K
  219. XM(`$]$"T04!Q]````;UH\]CH;(0\BL`!N^R$/(;(`;OL"#R&R$+"+?@```#0G
  220. XM=/I6$MCTUUU_3777XDUUU_3777]-==?TUUU_3777XDUUU_3777]-==?TUUU_
  221. XM3777XDUUU_3777]-==?TUUU_3777XDUUU_3777]-==?TUUU_3777]-==?B37
  222. XM77]-==?TUUU_3777]-==?B3777]-==?TUUU_3777]-==?B3777]-=?UTV"&@
  223. XM\G\```!L6E/V4+:PQ[#$M[^WO[N[N[N_M[^WP[/#M,:L:RL9LXLYL;"K6P:P
  224. XMM:F;FDJYF(O)*;R'B^M[Z&?`M<!U?"L\)T?#L<-T;%K%8WQ:Q7+VQXQV)LAL
  225. XMAA?(;(LLELFQRSRK'F`CL@(7XA8"%B<!]S8!]D]P'75P&W:`&8=P&7B`%XF`
  226. XM%8L/@!.+*`$8M(WXMHW8MYVYN)V9NIUYO)U9OITYP)T9PISYQ*RZQJR:R*QZ
  227. XMRJQ:S9PYT*OZTJO:U*NZUJN:V:M:W*LZWJL:`0JJ`3F)`6EI`8E)`:A(`<@H
  228. XM`>M0(/LP(K$"3Z`F^`*/8"I-`+!&H0```$HP9O-/RR`1]-]MV-OZV<#7PM7$
  229. XMT\;1R,Z!88RW-C?(A&2,2599P*9FJ+=GM+EIL:MKQ\!L##PVPZQ6Q4X#');?
  230. XM3*!@2J(```"->"KV,<=-WUW&W%W&W%W&W&W&W/;<<-MPVW#;<=IQVG)PW$`0
  231. XM$`$`+<UG+7<=AQV'#9<-EPV?;:;:;:;;7;;;7;;;]=Q'\+!&HP```$HP9O-/
  232. XMRDW^`Q;)3%;%K#;#P\!L#'MKH;EIM+=GN*9FK`E66<2$9(R'-C?+@6&,[(T<
  233. XM;3Q-7"U\#9^MN-UM_T`1++!@2J0```"->"KV,7]-SUVVVUVVVUVVVFVFVO;9
  234. XM<-EPV7#8<=AQUW+6W"`!`!`03<<'+:<=IQVW#;<-MPW/;<;<;<;<7<;<7<;<
  235. XM]=U,<,#-I@```$H]1OH_(P*V`J@"B@)L`DT`(]("'4`?8;`>8L`<9,`:9L`8
  236. XM9\`7:<`5:\`3;0L!)M'`$&T\WFU<W&ULVVV,V6VLUVW+UFW<U&W\TF`1S08!
  237. XM+,8!3*8!;(8!BW8!G%8!O#8!W!8![5\"#3`>U0'<%@&\-@&<5@&+=@%LA@%,
  238. XMI@$LQ@$<T&W\TFW<U&W+UFVLUVV,V6ULVVU<W&T\WFT<`0;0L!)KP!-IP!5G
  239. XMP!=FP!ADP!IBP!QAL![4`?T@(=`"/`)*`F@"A@+#`K#`S:@```!*/4;Z/P+#
  240. XM`K8"B`)J`DP"/0`AT@']0!ZQ8!S"8!K$8!C&8!?'8!7)8!/+8!*]!@$,T6WL
  241. XMTVW,U6V\UFV<V&U\VFUKW&U,W6TLWVT,`1;,`2:L`4:,`69[`89<`98\`;8<
  242. XM`=U0'M/P(-4!YAP!UCP!MEP!EGL!AHP!9JP!1LP!)M#`$6TLWVU,W6UKW&U\
  243. XMVFV<V&V\UFW,U6WLTV`0S18!*]!@$\M@%<E@%\=@&,9@&L1@',)@'K%@']0"
  244. XM'2`CT`),`FH"B`*F`L,0J`JP````.CH%`%@/<)!$M0```&!+1?9#(]@Q[%;5
  245. XMH]-Q;38O?1<WSW2,V%C+AIR9>@Q:":##H*&AOZ&CH[FCIJ6QI:FJI:JLR;#%
  246. XMM,&YN\"SRJ>SD$2V````8$M%]D.SI\JSP+NYP;3%L,FLJJ6JJ:6QI::CN:.C
  247. XMH;^AH:##H)H,6@><F6C+A8S81\]S]]%R;387TZ/L758CV#&0?;<```!@0U#R
  248. XM1+BVM;NQOJ[!K,.JQ*JFQZ3*HLNAS:'-H,Z@SISYSYT(T(T(T7T8T(T??1?2
  249. XM;2]])M)]+B;2?2XFT]@0`10>)M-]/B;3?3;3]]-M-]/WTHTHTGTHTHTHT9T9
  250. XMT9T:#0H-"ASZ'0HLZDS:;*Q*W#KL&QOK2[N+88!ZN@```&]24/)$J;:FNZ*^
  251. XMG\&=PYO$FY?'E<J3RY+-DLV1SI'.D,^0SY#0C0C0C1?1C0C1]]%])M+WTFTG
  252. XMTN)M)]+I)M-]/B;3?3;3]]-M-]/WTHTHTGTHTHTHT9#1D-&0T9'0D="2SY+0
  253. XMD\Z5S9?*Q)[#G\&BOJ6[J;80@'J[````;U)0\D0K6INZ6^HL&?PY_#RI?-E<
  254. XMZ3T)+/DM"1T)'1D-&0T9#1C2C2C2?2C2C2]]-]-M/WTVTWT^)M-^DM-M)^+2
  255. XM;2?2;2]])M)]'WT8T(T7T8T(T(T)#/D,^0SI'.D<V2S9++D\J5QY><PYO#G<
  256. XM&?OJ*[I[6I"`@[X```!O4FKR4*FVIKNBOI_!G<.;Q)N7QY7*D\N2S9+-D<Z1
  257. XMSI#/D,^0T(T(T(T7T8T(T7T8T7TFTGTO;2?2XFTGTND6TWT^)M-]/VTWTVTW
  258. XMTHTGTHTHTGTHTHTHT9#1D-&0T9'0D="2SY+0D\Z5S9?*Q)[#G\&BOJ6[J;8`
  259. XM9VU$X]9-08"#OP```&]2:O)0*UJ;NEOJ+!G\.?P\J7S97.D]"2SY+0D="1T9
  260. XM#1D-&0T8THTHTGTHTHTGTHTGTVTWT_;3?3XFTWZ1TVTGXM)M)]+VTGTFTGT8
  261. XMT7T8T(T7T8T(T(T)#/D,^0SI'.D<V2S9++D\J5QY><PYO#G<&?OJ*[I[4`:4
  262. XMU$X]9-1`@!+(````8$LA]BD=`0XQT>H,QLXBH$K,````2C4T]C:ZL,RVQ[K#
  263. XMOK_"N\:XR+;*M,RRSK#]"=)_U%XM8^+8$`'GXAV#XM9?U'TI_0L,ZRS+3*ML
  264. XMBXQKO"O[[#NL>VS+"Z"A),T```"->&CV4-BW`UPP+,D"71`?U0&ML!6ZM;H!
  265. XM&VP;;=M<>UVK+/LM>RT[+3L=FQT+#=L,ZPW[#+L`$[#(H!>L:@&:Q*`;K"D!
  266. XM^<"0(9OI`CF\D"6;J0)YN8`IBX@"N+:`+8M7`O>T@"^+*`,8L7`S>P@#.*<#
  267. XM5Y]P-WA@.6=P.79@.V7W`[=&`]8W`]<N-@/V%P/[+K`$&R`_?C%@/V)P/7-@
  268. XM/63W`[=6`[9G`Y=V`Y:/<#=Y<#5Z@#.+!P,WL8`QBR@"^+1P+WM8`MBV@"N+
  269. XMB`*8N9`GFZD"6;R0(YOI`AG`D!^<*@&ZQ*`9K&H!>LBP`3L,NPW[#.L-VPT+
  270. XM'9L=.RT[+7LL^RVK7'M=VVP;8!&ZM;H!7;`:U0']$"7)`LPP-;?8L#S.````
  271. XM/RUH]E#(7;?9Z9V>9]OE7=\\N+.X/!<WP1QC,PCS,\8<%S?!.+.XRSW>1=OD
  272. XM?9[0G9[#?;ZEW3R0L%_/````/RUH]E#(7;?9Z)V>1]OD7,'$/$%JDYH\-37#
  273. XM$)@<-37#.I.:RSW>1=OD?9Z)V7VU`Y7;?9YYV>5]OD7*BSN#P7-\$<8S,(\S
  274. XM/&'!<WP3BSN,KD7;Y7V>>=E]M<B@A-4````_.6CV4,^-2QT;//M<UT?+:%RF
  275. XMA\EGC(9ZQG:P_&9[#\5WL,5IG%>GQGL%Q_?6C6XGUN.-9];DC5^=7BC5Y)U.
  276. XM6=3EG4Y9U.2=7BC5^=7DC6?6XXUN)]:-;WQUL'QGI\69;%^P=\7[!VQK!GQJ
  277. XM=LB';)>&REALMT?-M<^ST;'4C/#!"=@```!*-U_W5P'$`EXF`C<"/V`3M7`0
  278. XMU";>W]P!';J;VITIV(U9UHUJU(ULTWU\TGV-#0?8<7Q]AB>WV6-Z?8<WGWV6
  279. XM5WC8=8;WV6=UC8=X3XV&B$C7>(/XV&J"C7>H*-=K@OC6>X&=9LU=5\U?U6T-
  280. XM74?0U?U&T=73?1U?TVTM72?2U?TFT]71?3U?T6U-70?4U?T&U=7'U=7&UM6W
  281. XMUI&+?6@HMM>"BGUX**;8@IEM>2F'UY*8;8DXAMB$AWV(2';9A7=MEVA7V(:%
  282. XM;9AW5MEX@WV(GW-ME[<7V'QQ;9?0T-A]'0UXTKUXU*UHUIU)V)TIV<FML!'<
  283. XMW]URU`$&:P$V`C<"/B8"5`'`D6;9````9UIJ^E&\I-ZLU[+2MLZBHJ+*H*J@
  284. XMQIL)PXM(P(N(O7O'NVP&N6PFMUQEM5R%LUREL5S%KUSEK5T%K$TDJUTEJ5U%
  285. XMJ$UDIUUEI5V%I$VDHUVEHDW$H5W%H$WDE=Y8]`$$=;J+162XI+)&2V6$L45;
  286. XM1:,Z]42T2G*O1$LTJ2KD1+)*LJU#6Q2M*L4DL5K2K4)+%*Q*U"2P6K:L0O2O
  287. XM6K>L05KFJWK)KUK5KHKUKCKX^N;*CZY<N.>M;+FL;*44K&RD)*U<I"XDK6R4
  288. XM):U<A32M7(1$K6QT1*Y;$JI$6M:P*I54KEKRJD9*]:XJI&6N6M*J5TKUK"JD
  289. XMA+!:HJM(6P6H*K64L5IBK$H%L6HCK%H4LW=*U*);2DKEHTMXL4I%V%I5UEIT
  290. XMUDJ%U%J5TEJTTDK%T%K5SEKUS%L5RELUR%M5QEMVPFN6P&NWO'O8N(P(M(PY
  291. XML)QJ"JH,JBHJ+.MM*RUZS>I+P#`1V@```#\R-/HS%L'6YG9M86P06`S@````
  292. XM7!YTV%4/[L%L6`WA````7!YTV%?L%F;`\L!%X@```%PA=-A5`03>;=?<C;C:
  293. XMG:G:G:G:G:G:^=J=J=JMJ=JMFMJ=JMGZV?K9O9K9^]CBO8XKV.*]C\V.*]CC
  294. XMS8^]C@-<V,!6XP```%PB=NY7V>`3S9O9XLV/S9O9S9O9O9S9O9O9O9O9O9O9
  295. XMK:K9K:K9K:G:G:G<]M^=Z=Z=VMVMRMVMRMR]N]N]N]N]N]K-J]N]K-J]K\VN
  296. XM+-J]K@$\R$/D````7"%TV%?@-<V?O9X\V>*]G\V>*]KBO:XKVOO:K:O:^MOZ
  297. XMVZVYVZVZVYVZVYW)W/G<G<G<G<G<G<G=C=C=?>8!!%@-\````%P?=.M5#^[!
  298. XM;69`#/$```!<'W3K5U[K(/O(1O(```!<(G3N54`1;??>C>G=G=G=G=G=G=G=
  299. XMG=G<K<G=G<K<K<G<K<^MSZW/K;O;K;O;K;^]OBO:S:XKVOS:^]KDS:O:X#7`
  300. XMR%3S````7"%VV%?@$\V;V>+-G\V;V<V;VOO:O:O:O:K;K;K;K<K;K<G<K<K<
  301. XMG=G]YMN=F=FMBMF=FMFMBMFMFMFMF]B]B]C[V+V,V+V/S7XLV+V.`3S8P$CT
  302. XM````7")T[E?9X#7-F]GDS9^]G\V>*]G-GBO9^]JMJ]JMJ]KZVOK:^MJMN=NM
  303. XMJMN=N=NMN=N=N=N=N=N=N=N=N=N-U]YM]`$0V`OU````7`QVV%<`6*#8"_8`
  304. XM``"-A03\(``A8&")^P```(UX1/8^E5VVVG#:;:<-IMIPV7#:;:<-EPV7#9]P
  305. XMV7#9<-EPV,&(Q(7%A,:"R(')?W+7<M9SU7/5=-1TTW;1=\]YSGK0>-)YU'C6
  306. XM=M=UUW77=-ATV'/9<MIRV7+:R(/'A,:&Q(?#B,"+<-MPVW#;<-OW#;<-MPVV
  307. XMVW#;<-MMMPVVVW#;;<6PV`O\````/S(T^C,`HJ!@B?T```"->$3V/K!=QMMP
  308. XMVVVW#;;;<-MPVVVW#;<-MPV_<-MPVW#;<(O!A\2&Q87&A,B#R-IRV7+9<]ES
  309. XMV'38=-=VUG?5>=-ZTGC1><]XT';2==-UU'34=-5SUG+6<M=R@<>"QX/&A,2&
  310. XMPXG`V7#9<-EPV7#9]PV7#9<-IMIPV7#:;:<-IMIPVFVUE5`<_@```&]:6O94
  311. X7ACK^@F"%LA#R&RA>?6"%LA#R&R'U]O;:
  312. X`
  313. Xend
  314. END_OF_FILE
  315.   if test 17561 -ne `wc -c <'fonts.lj/S.28.pk.UU'`; then
  316.     echo shar: \"'fonts.lj/S.28.pk.UU'\" unpacked with wrong size!
  317.   fi
  318.   # end of 'fonts.lj/S.28.pk.UU'
  319. fi
  320. if test -f 'man/troff2ps.1.S' -a "${1}" != "-c" ; then 
  321.   echo shar: Will not clobber existing file \"'man/troff2ps.1.S'\"
  322. else
  323.   echo shar: Extracting \"'man/troff2ps.1.S'\" \(15909 characters\)
  324.   sed "s/^X//" >'man/troff2ps.1.S' <<'END_OF_FILE'
  325. X.\"Copyright 1988 by Chris Lewis 2.11 91/03/26
  326. X.TH TROFF2PS %%MANEXT%% "Psroff %%T2VERSION%%"
  327. X.SH NAME
  328. Xtroff2ps, troff2lj, troff2xx \- convert troff output to Postscript, HP etc.
  329. X.SH SYNOPSIS
  330. X.BI %%LIBDIR%%/troff2 xx
  331. X.BI "[\-D" debopts "]"
  332. X.BI "[\-T" xx "]"
  333. X.BI "[\-R" nn "]"
  334. X.BI "[\-P" opt "]*"
  335. X.BI "[\-l" length "]"
  336. X.BI "[\-p" prolog "]"
  337. X.BI "[\-O" l "]"
  338. X.BI "[\-Y" l "]"
  339. X.BI "[\-W" directory "]"
  340. X.B "[\-N]"
  341. X.B "[\-Z]"
  342. X.B "[\-V]"
  343. X.B "[\-M]"
  344. X.B "[\-S]"
  345. X.SH DESCRIPTION
  346. X.I Troff2ps
  347. Xtakes
  348. XCAT
  349. X.I troff
  350. Xoutput on standard input and transforms it into another format for
  351. Xoutput on a printer.
  352. XThis program is normally invoked by
  353. X.IR psroff (%%MANEXT%%),
  354. Xwhich has a more complete description of how to use some of the more
  355. Xinteresting features of this program.
  356. X.PP
  357. XThe
  358. X.B \-N
  359. Xoption tells troff2ps to expect
  360. X.I ditroff
  361. X(\f3D\fPevice \f3I\fPndependent \f3Troff\fP)
  362. Xinput instead of CAT
  363. X.IR troff .
  364. X(NOTE: if you wish to use ditroff, you have to make sure that the
  365. Xditroff widths are installed in the proper directory (/usr/lib/font/devxxx)
  366. Xfor ditroff to find, and that
  367. X.B \-d
  368. Xoption is set correctly to the appropriate name (same as the dev suffix)
  369. Xso that the ditroff backend will work properly.
  370. X.PP
  371. XThe output format is determined by how
  372. X.I troff2ps
  373. Xis invoked.
  374. XNormally,
  375. X.I troff2ps
  376. Xwill generate PostScript output, but the
  377. X.B \-T
  378. Xoption will allow you to specify other types of output.
  379. XYour system administrator (or the original author of this program) may
  380. Xmake other output options available from time to time.
  381. X.PP
  382. XThe
  383. X.BI \-l length
  384. Xoption is used to tell the software how long the pages are on the printer.
  385. XThe default value is 11 inches.
  386. XLength should be written as if you were issuing a ``.pl''
  387. X.I troff
  388. Xcommand; eg: troff scaling should be used.
  389. XFor example: ``\-l11i'', ``\-l4752u'', ``\-l792p'' and ``\-l66P''
  390. Xspecify a page length of
  391. X11 inches in inches,
  392. X.I troff
  393. Xunits, points and Picas respectively.
  394. XCentimetres (``c'') are also supported, but ``v'', ``m'' and ``n'' are not.
  395. X.PP
  396. XThe
  397. X.BI \-T xx
  398. Xoption sets the output format.
  399. XFor example, "troff2ps \-Tlj" will generate Laserjet output.
  400. X.PP
  401. XThe
  402. X.B \-D
  403. Xoption generates scads of diagnostic output in a file called "diagnostics"
  404. Xin the current directory.
  405. XThe type of diagnostics is selected by
  406. X.IR debopts ,
  407. Xwhich is a string of characters from the following list: 'c': cat codes, 's':
  408. Xspecial directives, 'f': font management (laserjets), 'b':
  409. Xcat\(->backend character translations, 'p': PK font handling, 'v':
  410. Xextremely verbose, 'F' flush after every debug print statement (very slow).
  411. XIf DEBUG turned off during compilation, this will not be available.
  412. X.PP
  413. XThe
  414. X.B \-V
  415. Xoption causes
  416. X.I troff2ps
  417. Xto print a version message and quit.
  418. X.PP
  419. XA trailer page of statistics can be generated by using the
  420. X.B \-M
  421. Xoption provided that the driver supports it.
  422. X.PP
  423. XWhere
  424. X.I troff2ps
  425. Xis generating output for another typesetting filter (eg: jetroff),
  426. Xsometimes the filter will require different resolution settings for output.
  427. XFor example, jetroff parsing of ditroff input assumes a resolution of
  428. X300 in character positioning, but jetroff does not parse the "x res <nn>"
  429. Xcommand.
  430. XThe
  431. X.BI "[\-R" nn "]"
  432. Xoption allows you to specify the resolution that the output filter expects.
  433. XDitroff output has the default resolution set to 300.
  434. X(Which is compatible with jetroff.)
  435. X.PP
  436. XThe
  437. X.BI \-P opt
  438. Xdirective can be specified as many times as you wish, it tells
  439. X.I troff2ps
  440. Xto emit each
  441. X.I opt
  442. Xin turn as special requests after the printer-specific
  443. Xprolog is generated, but before any pages are emitted.
  444. XThis allows you to specify file inclusions or form overlays or any
  445. Xother special request feature in a way that won't interfere with
  446. Xthe beginning of documents, or things like changing forms without
  447. Xmodifying the document.
  448. XEach
  449. X.I opt
  450. Xis specified in the same way as the
  451. X.B sR
  452. Xmacro below.
  453. X.PP
  454. XThe
  455. X.B \-O
  456. Xand
  457. X.B \-Y
  458. Xoptions allow you to specify page X and Y offsets respectively.
  459. XThe value should be a number with a valid troff scale factor.
  460. XEg: ``\-O.463i''.
  461. X.PP
  462. XThe
  463. X.B \-Z
  464. Xand
  465. X.B \-W
  466. Xoptions control the optimizer.
  467. XIf the
  468. X.B \-Z
  469. Xoption is specified, the backends attempt to coalesce strings of
  470. Xcharacters into one drawing request.
  471. XWithout this option,
  472. X.B troff2
  473. Xdraws words by positioning each letter separately.
  474. XThe optimizer can reduce the size of the output file by factors of 3 or
  475. Xmore, and printer speeds similarly, particularly in Postscript.
  476. XThis option is disabled in ditroff-output-mode - it's up to the
  477. Xditroff filter to optimize.
  478. XThis option should only be used on printers that scale their fonts,
  479. Xrather than those that have individual fonts downloaded.
  480. XThis is because individual fonts often do not scale very well.
  481. XThe
  482. X.BI \-W directory
  483. Xallows you to specify where the width tables are, by default they
  484. Xare "/usr/lib/font/\fItype\fP", where \fItype\fP is the driver
  485. Xtype specified by the
  486. X.B \-T
  487. Xoption.
  488. XThis option is useful if you've moved the width directory somewhere
  489. Xelse, or the final directory name is different from the
  490. X.B \-T
  491. Xvalue (ie: with ditroff).
  492. XSee psrofflib entry "ops" for an example.
  493. XThe
  494. X.B \-W
  495. Xoption is ignored unless
  496. X.B \-Z
  497. Xis specified.
  498. X.PP
  499. XThe optimizer is quite good, but it is known that columns of text separated
  500. Xby a leader made up of periods can fool it.
  501. XAt the present time, it is unknown whether it's a width table or
  502. Xprinter or troff wierdness.
  503. X.PP
  504. XThe \-S option indicates that Postscript jobs should be terminated
  505. Xwith the directive "stop" instead of a control-D.
  506. X.SH "SPECIAL REQUESTS"
  507. X.BI troff2 xx
  508. Xsupports a number of additional features over and above bare
  509. XCAT
  510. X.IR troff .
  511. XThe macro adapters (see
  512. X.IR psroff (%%MANEXT%%))
  513. Xcontain a macro called "\fB.sR\fP".
  514. XThis macro is used to send special requests to the printer driver.
  515. XThe macro is invoked with the following arguments:
  516. X.RS
  517. X.nf
  518. X\&.sR "<func><arg><arg>..."
  519. X.fi
  520. X.RE
  521. X.PP
  522. XWhere
  523. X.I func
  524. Xis a single letter function code.
  525. X.I arg
  526. Xis an argument to the function - the number of arguments a function
  527. Xtakes is dependent on the function.
  528. X.TP 1.3i
  529. XFunction
  530. XMeaning
  531. X.TP 1.3i
  532. XO<name>
  533. XOverlay:
  534. Xuse "name" as the name of an overlay file.
  535. XMore than one can be specified by separating by blanks.
  536. XThe overlay is typically a name from the printer-specific library.
  537. XEg: "Confidential" is the name for the confidential overlay.
  538. XOnly supported by postscript driver and this directive must be
  539. Xexecuted before any output on the page the overlay is desired.
  540. XA O without a name (eg: ``.sR "O"'') cancels the current overlay.
  541. XMore than one overlay can be specified in one ``O'' request, as
  542. Xin "OLetterhead Confidential".
  543. X.TP 1.3i
  544. XL<name>
  545. XLetterhead: same as ``O'', except that the overlay is
  546. Xcancelled after the first use.
  547. XA ``.sR "LLetterhead"'' is the same as a ``.sR "OLetterhead"'' followed
  548. Xby ``.sR "O"'' after the pagebreak.
  549. XAny pre-existing "O" directive is cancelled by the "L" and vice-versa.
  550. X.TP 1.3i
  551. XFnAA
  552. XSwitch troff font (n) 1..4 to driver font AA (eg: .fp 1 CW becomes F1CW).
  553. XSee the
  554. X.I *.fonts
  555. Xfiles for which fonts are supported.
  556. X.TP 1.3i
  557. XI<file>
  558. XInclude the file specified as the single argument into the driver
  559. Xoutput.
  560. XThe driver type is appended onto the end of the file name.
  561. XEg: with the Postscript driver,
  562. X".sR Ifoo"
  563. Xbecomes an inclusion of "foo.ps".
  564. X.RI troff2 xx
  565. Xwill read the file from the current directory if it exists there, otherwise
  566. Xfrom the troff2 library directory.
  567. X.sp
  568. XThese are not
  569. X.I troff
  570. Xinclusions - they are interpreted only by
  571. X.RI troff2 xx.
  572. XThis is how the libraries are loaded.
  573. XSee the section on libraries on how to write library files.
  574. X.sp
  575. XFor compatibility with psfig, ``f<file>'' is accepted as a synonym.
  576. X.TP 1.3i
  577. Xi<file>
  578. XSame as "I", except that no translations are done whatsover,
  579. Xallowing you to enter binary files in the driver's output stream.
  580. X.TP 1.3i
  581. XE<string>
  582. XPasses "string" through the stderr of the backend.
  583. XUsed for passing index macro and macro error messages through to where
  584. Xyou can see them.
  585. XAll drivers.
  586. X.TP 1.3i
  587. XP<string>
  588. XPasses "string" through the backend directly to the printer.
  589. XThis is how you can send text in troff directly to the printer (ie:
  590. Xembedded postscript inclusions - eg: psfig).
  591. XAll drivers.
  592. XFor compatibility with psfig, ``p<string>'' is accepted as a synonym.
  593. X.TP 1.3i
  594. XS<string>
  595. XTakes the string and executes it as a command.
  596. XAll drivers.
  597. X.TP 1.3i
  598. XC<xx>
  599. XWhere ``xx'' is an extended character from the <type>.fonts file.
  600. XCauses psroff to print the character.
  601. XThe character needs to be defined in a ``extensions'' section in the
  602. Xappropriate ``fonts'' file for this to work.
  603. X.PP
  604. XNote: in the macro adapters, the real ``.tm'' directive has been renamed to
  605. X``.tM'', and is implemented by invoking ``.sR "E<tm arguments>"''.
  606. XThus, use of ".tm" will simply forward the message through stderr - and
  607. Xcan be used with the common document indexing schemes.
  608. X.SH "LIBRARY FILES"
  609. X.I Troff2ps
  610. Xsupports the inclusion of printer-specific files both through explicit
  611. Xinclusions in your
  612. X.I troff
  613. Xfiles, as well as including a standard prolog in a printer-independent
  614. Xfashion.
  615. X.B troff2ps
  616. Xalways loads the files
  617. X.IR xx. lib,
  618. Xand
  619. X.IR xx. fonts,
  620. Xwhere
  621. X.I xx
  622. Xis the printer type selected.
  623. XEg: "ps.lib" for PostScript, or "lj.lib" for LaserJet.
  624. X.PP
  625. Xxx.lib contains printer-initialization and xx.fonts contains a list
  626. Xof fonts and how to select them on the printer.
  627. XPrecise details of how the fields in xx.fonts is interpreted varies
  628. Xfrom device type to device type, and you should consult the
  629. Xexisting .fonts file for the driver you're interested in to see
  630. Xwhat can be specified.
  631. X.PP
  632. XThe default prefix is the driver type (eg:
  633. X.B \-T
  634. Xoption) but can be overridden by using the
  635. X.BI \-p prefix
  636. Xoption.
  637. XWith an include directive (either "I" or "i" with ".sR"),
  638. X.I troff2xx
  639. Xwill append the suffix to the file name before searching for the file.
  640. X.PP
  641. XFiles are searched for in the current directory first, then ./lib
  642. Xthen %%LIBDIR%%/lib last.
  643. X.PP
  644. XThe scanning of normal include files is done by stripping all comments
  645. X(prefixed by "%") and all whitespace (in lj driver, not neccessary for
  646. XPostScript).
  647. XSee the comment in the lj.lib file for more details.
  648. XWithin the lib files you can recursively include other files as well by
  649. Xusing "%%%include filename".
  650. X.PP
  651. XThe "i" include form (.sR macro) or "%%%binclude filename" form (inside
  652. Xa library file) does the same thing, except that the file included is
  653. Xsimply copied, no translations are done.
  654. X.SH "NEW BACKEND MECHANISM FOR SPECIAL DIRECTIVES"
  655. X.PP
  656. XThere is a new mechanism in
  657. X.B troff2ps
  658. Xto support backend communication other than by using ``.sR''.
  659. XThese commands are invoked by the following sequence:
  660. X.RS
  661. X.nf
  662. X\eka\eo'\e(bs\e(bs'<sequence>\e(bs\eh'|\enau'
  663. X.fi
  664. X.RE
  665. XWhich means, mark the current horizontal position in number register ``a'',
  666. Xoverstrike two bell symbols.
  667. X<sequence> is any special directive above (eg: Ifilename), where any spaces
  668. Xare replaced with some non-ASCII character
  669. X.RB ( catconv
  670. Xuses \e(ts).
  671. XThen, the sequence is followed by another bell symbol and the horizontal
  672. Xposition is reset to the position marked in ``a''.
  673. XSuch a directive takes up no horizontal space.
  674. XIf you want the directive to take up more horizontal space, you have to
  675. Xadd an increment onto the \eh'|\enau' clause.
  676. X.BR Catconv ,
  677. Xfor example, converts extended character sets into the above sequence,
  678. Xwhere <sequence> is replaced with ``Cxx'', where ``xx'' is the CAT
  679. Xtroff name, and the \eh clause is \eh'|\enau+1n'.
  680. XThis mechanism isn't perfect - troff2ps's finite state automaton
  681. Xdoes get screwed up with moderately complicated PIC directives.
  682. X.SH "CHARACTER ENCODING OVERRIDES"
  683. X.PP
  684. X.B Troff2ps
  685. Xconverts the CAT codes (see cat(1)) into printer codes in the backend drivers
  686. Xby means of a set of compiled-in tables.
  687. XThese compiled tables aren't always exactly what you want for your printer.
  688. X.B Troff2ps
  689. Xallows you to override these tables by the use of character overrides in the
  690. X.IR xx .fonts
  691. Xfile.
  692. XAt the end, you can specify what character to print for a given CAT
  693. Xcharacter.
  694. XThis is done by the specification of one or more of the ``symbol'', ``normal''
  695. Xor ``extensions'' sections.
  696. XEach section consists of one of these three words, followed by a sequence
  697. Xof character encoding overrides.
  698. X.PP
  699. XAn override is specified thusly:
  700. X.RS
  701. X.nf
  702. X.ta .5i 1i 2i 3i 4i 5i
  703. Xchar    font    sequence    xshift    yshift    scale
  704. X.fi
  705. X.RE
  706. X.PP
  707. XWhere ``char'' is the CAT character name, eg: ``a'' for the character
  708. X``a'' or ``xx'' for the character ``\e(xx''.
  709. X``font'' is ``N'' if the character is to be found in a normal character set,
  710. Xor ``S'' is the character is to be found in the symbol character set, or a
  711. Xnumber specifying that the character should be found in a specific font (the
  712. Xnumber starts from 0, and corresponds to the font position in the ``xx.fonts''
  713. Xfile).
  714. XSequence is a string of codes you want to send to the printer for that
  715. Xcharacter.
  716. XSequence can be any combination of 8 bit characters or 3 digit octal escape
  717. Xsequences (eg: \e203).
  718. XMore than one character can be specified, along with backspaces (for
  719. Xoverstriking).
  720. XFor example, O\e008/ constructs a crude empty-set symbol.
  721. X(Backspace sequences or similar things may not work in a given driver.
  722. XFor example, backspace in Postscript won't do what you want).
  723. Xxshift and yshift are increments to be added to the X and Y position of the
  724. Xcharacter before emitting the sequence.
  725. XWhitespace (space or tab) cannot occur in the sequence, but you can use
  726. Xthe octal escapes.
  727. XThese numbers are scaled by the point size and are in the resolution of the
  728. Xbackend driver multiplied by 100.
  729. XSimilarly, the scale parameter is a factor to apply to the point size, and
  730. Xis similarly scaled by 100.
  731. X.PP
  732. XA special font directive ``D'' is also available, which means that the
  733. Xsequence should be emitted verbatim - this is of use only in Postscript,
  734. Xwhere you can use the sequence to be the name of an invokeable function that
  735. Xdraws the desired glyph - the X and Y position will be on the stack.
  736. X.PP
  737. Xfont defaults to the same as the header.
  738. Xsequence defaults to the character name.
  739. Xxshift, yshift and scale default to 0, 0 and 100 respectively, which means
  740. Xno x or y shift, and 1:1 scaling.
  741. X.PP
  742. XAs an example to clarify the overall format:
  743. X.RS
  744. X.nf
  745. Xnormal
  746. Xa    N
  747. Xb    S    b
  748. Xsymbol
  749. Xbs    N    \e341
  750. Xextensions
  751. XAE    4    \e341    0    0    200
  752. X.fi
  753. X.RE
  754. XWhich means: character ``a'' is encoded as ``a'' and is found in the normal
  755. Xfont.
  756. XCharacter ``b'' is encoded as ``b'', and is found in the symbol font.
  757. XSymbol character \e(bs is to be found in the normal font, and is selected
  758. Xby emitting the octal character \e341.
  759. XAnd finally,
  760. X\e(AE is printed by selecting font 4 (usually the one defined after S
  761. Xin the xx.fonts file), and scaling by a factor of 2, and emitting \e341
  762. Xto select it.
  763. X.PP
  764. XNote: an error will be emitted if you get a troff character name in the
  765. Xwrong section.
  766. XGenerally speaking, ``normal'' characters are those that CAT troff has
  767. Xin fonts other than the symbol font.
  768. XSymbol characters are those found in the CAT troff symbol font.
  769. XAnd ``extensions'' are characters that aren't in CAT troff at all, but
  770. Xcan be faked through the ``Cxx'' special directives.
  771. X.SH FILES
  772. X.if t .ta 2.5i
  773. X.if n .ta 3.5i
  774. X%%LIBDIR%%    Troff2ps library directory
  775. X.br
  776. X%%LIBDIR%%/lib/*.fonts    Font tables.
  777. X.br
  778. X%%LIBDIR%%/lib/*.lib    Prefix libraries for output.
  779. X.br
  780. Xetc.
  781. X.SH BUGS
  782. XDue to the nature by which special sequences are transmitted by
  783. Xtroff (troff's stderr is merged with its stdout and is piped into
  784. Xtroff2ps's stdin by
  785. X.IR psroff ),
  786. Xnormal troff errors will not be seen and may generate a few
  787. X"invalid opcode" messages from troff2ps or garble on output.
  788. XNormally the document will be truncated if this occurs.
  789. XIf this happens, run
  790. X.I psroff
  791. Xwith the ``\-F'' option which will show you troff's stderr without
  792. Xgenerating any output.
  793. X.PP
  794. XUnfortunately, there is no way at present for the ".sR" macro to
  795. Xchange fonts within a line - for some pretty bizarre reasons if you ask
  796. Xme.
  797. XNever mind.
  798. XAsk me if you want more information.
  799. X.SH "SEE ALSO"
  800. Xtroff(1), psroff(%%MANEXT%%), catconv(%%MANEXT%%).
  801. X.SH AUTHOR
  802. XChris Lewis
  803. END_OF_FILE
  804.   if test 15909 -ne `wc -c <'man/troff2ps.1.S'`; then
  805.     echo shar: \"'man/troff2ps.1.S'\" unpacked with wrong size!
  806.   fi
  807.   # end of 'man/troff2ps.1.S'
  808. fi
  809. if test -f 'troff2.c' -a "${1}" != "-c" ; then 
  810.   echo shar: Will not clobber existing file \"'troff2.c'\"
  811. else
  812.   echo shar: Extracting \"'troff2.c'\" \(17179 characters\)
  813.   sed "s/^X//" >'troff2.c' <<'END_OF_FILE'
  814. X/*
  815. X    Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 Chris Lewis
  816. X        All Rights Reserved
  817. X
  818. X    See the LICENSE file for a full description of restrictions under which
  819. X    this software is provided.
  820. X
  821. X    Function:        CAT Troff interpreter front end and mainline
  822. X */
  823. X
  824. X#include "defs.h"
  825. X
  826. X#ifndef    lint
  827. Xstatic char SCCSid[] =
  828. X    "@(#)troff2.c: 2.15 Copyright 91/03/25 23:20:47 Chris Lewis";
  829. X#endif
  830. X
  831. X#define    ESC    0x80
  832. X#define    FLASH    0x00
  833. X#define    CONTROL    0x40
  834. X#define    LEAD    0x60
  835. X#define    SIZE    0x50
  836. X
  837. X#define    DOWN    0
  838. X#define    UP    1
  839. X#define    LOWER    2
  840. X#define    UPPER    3
  841. X#define    FORWARD    4
  842. X#define    BACKWARD 5
  843. X
  844. X#ifdef    BSDHACK
  845. Xint    magnify_lead = 0;
  846. X#endif
  847. X
  848. Xchar ptab[15] = { 7, 8, 10, 11, 12, 14, 18, 9, 6, 16, 20, 22, 24, 28, 36};
  849. Xint    points, font;
  850. X
  851. Xint    xpos, ypos;
  852. X
  853. X#ifdef    VDEBUG
  854. Xchar *words[] = {
  855. X    "down", "up", "lower", "upper", "forward", "backwards"
  856. X    };
  857. X#endif
  858. X
  859. X
  860. X#define    CTOINT(val,sig)    ((~c)&sig)
  861. X
  862. Xint pagelength;
  863. Xint pageoffset;
  864. Xint pageyoffset;
  865. X
  866. Xchar *version, *shortversion;
  867. X
  868. Xint dumpflag = 0;
  869. X
  870. X#define    CFONT (((mag == UPPER)<<2)|((rail == UPPER)<<1)|(tilt==DOWN))
  871. X#ifdef    FONT4
  872. X#define    calcfont    font = (CFONT >> 1)
  873. X#else
  874. X#define    calcfont    font = CFONT
  875. X#endif
  876. X
  877. Xchar *progname;
  878. Xchar *printer;
  879. Xchar *device = {"alw"};
  880. Xchar **prologs = (char **) NULL;
  881. Xchar *pstrailer = "\004";
  882. X#define    PROCHUNK    20
  883. Xint procount;
  884. X
  885. X#ifdef    L_cuserid
  886. X#define    nmMAX    L_cuserid
  887. X#else
  888. X#define    nmMAX    16
  889. X#endif
  890. X
  891. Xchar username[nmMAX];
  892. X
  893. Xdouble calc();
  894. X
  895. Xchar *driver = "ps";
  896. X#ifdef    OPT
  897. Xchar *widthtables = (char *)NULL;
  898. Xchar *widthptr;
  899. Xint optimize = 0;
  900. X#endif
  901. X
  902. Xextern char *realloc();
  903. X
  904. X#define    OPTLIST    "d:O:Y:T:VD:l:MR:P::zp:W:ZNS"
  905. X
  906. X/*    On 386/ix 1.0.6 profiling has a bug in it that leaves
  907. X    two extra longs on the stack between the stack frame and
  908. X    arguments on entry to main */
  909. X#ifdef    PROFBUG
  910. X
  911. Xmain(j1, j2, argc, argv)
  912. Xlong j1, j2;
  913. Xint argc;
  914. Xchar **argv; {
  915. X
  916. X#else
  917. X
  918. Xmain(argc, argv)
  919. Xint    argc;
  920. Xchar    **argv; {
  921. X
  922. X#endif
  923. X    register int nc, c;
  924. X    register int units;
  925. X    register int rail, mag, tilt, half, escape, lead;
  926. X
  927. X    extern int getopt();
  928. X    extern char *optarg;
  929. X
  930. X#ifdef    L_cuserid
  931. X    extern char *cuserid();
  932. X
  933. X    (void) cuserid(username);
  934. X    if (!username[0])
  935. X#else
  936. X
  937. X    extern char *getlogin();
  938. X
  939. X    progname = getlogin();
  940. X    if (progname)
  941. X        strcpy(username, progname);
  942. X    else
  943. X        /* I could read /etc/passwd, but hell, why? */
  944. X#endif
  945. X        sprintf(username, "uid=%d", getuid());
  946. X
  947. X    /* some compilers complain about floating point in initializers... */
  948. X    pagelength = DEFPL * TROFFRESOLUTION;
  949. X    pageoffset = DEFOFF * TROFFRESOLUTION;
  950. X    pageyoffset = DEFYOFF * TROFFRESOLUTION;
  951. X
  952. X    progname = strrchr(argv[0], '/');
  953. X    if (progname)
  954. X        progname++;
  955. X    else
  956. X        progname = argv[0];
  957. X
  958. X    version = T2VERSION + 4;
  959. X    shortversion = strchr(version, '-') + 2;
  960. X
  961. X    while((c = getopt(argc, argv, OPTLIST)) != EOF)
  962. X        switch (c) {
  963. X        case 'S':
  964. X            pstrailer = "stop\n";
  965. X            break;
  966. X#ifdef    OPT
  967. X        case 'Z':
  968. X            optimize = 1;
  969. X            break;
  970. X        case 'W':
  971. X            widthtables = mustmalloc(strlen(optarg) + 10, "widthname");
  972. X            strcpy(widthtables, optarg);
  973. X            strcat(widthtables, "/");
  974. X            break;
  975. X#else
  976. X        case 'Z':
  977. X        case 'W':
  978. X            fprintf(stderr,
  979. X            "%s: optimization disabled; -Z/-W ignored (%s)\n",
  980. X            progname, "see OPT in defs.h");
  981. X            break;
  982. X#endif
  983. X        case 'P':
  984. X            if (!prologs) {
  985. X            prologs = (char **) mustmalloc(PROCHUNK * sizeof(char*),
  986. X                "prologs");
  987. X            procount = 0;
  988. X            }
  989. X            prologs[procount++] = optarg;
  990. X            /* insert the null */
  991. X            if ((procount % PROCHUNK) == 0) {
  992. X            prologs = (char **) realloc((char *) prologs,
  993. X                (procount + PROCHUNK) * sizeof(char *));
  994. X            }
  995. X            prologs[procount] = (char *) NULL;
  996. X            break;
  997. X        case 'p':
  998. X            printer = optarg;
  999. X            break;
  1000. X        case 'd':
  1001. X            device = optarg;
  1002. X            break;
  1003. X        case 'z':
  1004. X            dumpflag++;
  1005. X            break;
  1006. X        case 'T':
  1007. X            driver = optarg;
  1008. X            break;
  1009. X        case 'R':
  1010. X#if    defined(DT)
  1011. X            {
  1012. X            extern int dtresolution;
  1013. X            dtresolution = atoi(optarg);
  1014. X            if (dtresolution == 0) {
  1015. X                fprintf(stderr, "%s: Invalid resolution: %s\n",
  1016. X                progname, optarg);
  1017. X                exit(1);
  1018. X            }
  1019. X            }
  1020. X            break;
  1021. X#else
  1022. X            fprintf(stderr, "%s: Resolution not supported\n",
  1023. X            progname);
  1024. X            exit(1);
  1025. X#endif
  1026. X        case 'N':
  1027. X#ifdef    DIT
  1028. X            ditroff = 1;
  1029. X            break;
  1030. X#else
  1031. X            fprintf(stderr, "%s: ditroff frontend not configured\n");
  1032. X            exit(1);
  1033. X#endif
  1034. X        case 'M':
  1035. X            metrics = 1;
  1036. X            break;
  1037. X        case 'V':
  1038. X            printf("%s: %s\n", progname, version);
  1039. X            exit(0);
  1040. X        case 'D':
  1041. X#ifdef    DEBUG
  1042. X            setdebug(optarg, "diagnostics");
  1043. X            break;
  1044. X#else
  1045. X            fprintf(stderr, "%s: DEBUG disabled - recompile\n",
  1046. X            progname);
  1047. X            exit(1);
  1048. X#endif
  1049. X        case 'O':
  1050. X            pageoffset = calc(optarg);
  1051. X            break;
  1052. X        case 'Y':
  1053. X            pageyoffset = calc(optarg);
  1054. X            break;
  1055. X        case 'l':
  1056. X            pagelength = calc(optarg);
  1057. X            if (pagelength == 0) {
  1058. X            fprintf(stderr, "%s: Bad pagelength %s\n", progname,
  1059. X                optarg);
  1060. X            exit(1);
  1061. X            }
  1062. X            break;
  1063. X        case '?':
  1064. X        default:
  1065. X            usage();
  1066. X            exit(1);
  1067. X        }
  1068. X
  1069. X    getdriver(driver);
  1070. X
  1071. X    if (!printer)
  1072. X        printer = driver;
  1073. X
  1074. X#ifdef    OPT
  1075. X    if (!widthtables) {
  1076. X        widthtables = mustmalloc(strlen(driver) + strlen(FONTDIR) + 20,
  1077. X        "widthname");
  1078. X        sprintf(widthtables, "%s/%s/", FONTDIR, driver);
  1079. X    }
  1080. X    widthptr = widthtables + strlen(widthtables);
  1081. X#endif
  1082. X
  1083. X    loadfont(be->bestdfont, be->besymfont);
  1084. X#ifdef    DEBUG
  1085. X    if (debug & D_SPEC) {
  1086. X        for (c = 0; c < procount; c++) {
  1087. X        DBP((D_SPEC, "Prolog %d: %s\n", c, prologs[c]));
  1088. X        }
  1089. X    }
  1090. X#endif
  1091. X
  1092. X    if (dumpflag) {
  1093. X
  1094. X        printf("Font table:\n\n");
  1095. X        for (c = 0; fonttable[c].tab[0]; c++)
  1096. X        printf("%-3s %-20s %-20s %-20s\n",
  1097. X            fonttable[c].tab[0],
  1098. X            fonttable[c].tab[1],
  1099. X            fonttable[c].tab[2],
  1100. X            fonttable[c].tab[3]);
  1101. X
  1102. X        dumptables(be);
  1103. X        exit(0);
  1104. X    }
  1105. X
  1106. X#ifdef    DIT
  1107. X    if (ditroff) {
  1108. X        dit();
  1109. X#ifdef    OPT
  1110. X        canonflush();
  1111. X#endif
  1112. X        if (be->bepage)
  1113. X        (*be->bepage)();
  1114. X        if (be->beepilog)
  1115. X        (*be->beepilog) ();
  1116. X        exit(0);
  1117. X    }
  1118. X#endif
  1119. X
  1120. X    if (be->beprolog)
  1121. X        (*be->beprolog)();
  1122. X
  1123. X    resetState();
  1124. X
  1125. X    /* An Initialize sequence *usually* comes in first, but what the
  1126. X        hey ... */
  1127. X    xpos = 0;
  1128. X    ypos = -153;
  1129. X    escape = FORWARD;
  1130. X    lead = FORWARD;
  1131. X    half = LOWER;
  1132. X    rail = LOWER;
  1133. X    mag = LOWER;
  1134. X    tilt = DOWN;
  1135. X    calcfont;
  1136. X
  1137. X    while ((c = getc(stdin)) != EOF) {
  1138. X        switch(c) {
  1139. X        case 0x00:
  1140. X            DBP((D_CAT,"NOP\n"));
  1141. X            break;
  1142. X        /* Flash (print character) codes */
  1143. X        case 0x01: case 0x02: case 0x03: case 0x04:
  1144. X        case 0x05: case 0x06: case 0x07: case 0x08:
  1145. X        case 0x09: case 0x0a: case 0x0b: case 0x0c:
  1146. X        case 0x0d: case 0x0e: case 0x0f: case 0x10:
  1147. X        case 0x11: case 0x12: case 0x13: case 0x14:
  1148. X        case 0x15: case 0x16: case 0x17: case 0x18:
  1149. X        case 0x19: case 0x1a: case 0x1b: case 0x1c:
  1150. X        case 0x1d: case 0x1e: case 0x1f: case 0x20:
  1151. X        case 0x21: case 0x22: case 0x23: case 0x24:
  1152. X        case 0x25: case 0x26: case 0x27: case 0x28:
  1153. X        case 0x29: case 0x2a: case 0x2b: case 0x2c:
  1154. X        case 0x2d: case 0x2e: case 0x2f: case 0x30:
  1155. X        case 0x31: case 0x32: case 0x33: case 0x34:
  1156. X        case 0x35: case 0x36: case 0x37: case 0x38:
  1157. X        case 0x39: case 0x3a: case 0x3b: case 0x3c:
  1158. X        case 0x3d: case 0x3e: case 0x3f:
  1159. X            /* This is terribly kludgey:
  1160. X                In 432 units per inch, 4752 is 11 inches.
  1161. X                When we go beyond this, we subtract 4752
  1162. X                continually until we're back in range.
  1163. X            */
  1164. X            while (ypos >= pagelength) {
  1165. X                   ypos -= pagelength;
  1166. X                DBP((D_CAT,"Page break\n"));
  1167. X                if (be->bepage)
  1168. X                (*be->bepage) ();
  1169. X            }
  1170. X            /*c = c&0x3f;    Isn't necessary */
  1171. X            /*    Find the C/A/T code */
  1172. X            if (half == UPPER) {
  1173. X                if (c > 46) {
  1174. X                fprintf(stderr, "%s: Illegal upper flash: %d\n",
  1175. X                    progname, c);
  1176. X                exit(1);
  1177. X                }
  1178. X                nc = c + 62;
  1179. X            } else
  1180. X                nc = c - 1;
  1181. X
  1182. X            DBP((D_CAT,"nc=%d;pnts=%d;x,y=%d,%d;fnt=%d;\n",
  1183. X                nc,points,xpos,ypos,font));
  1184. X#ifdef    VDEBUG
  1185. X            DBP((D_CAT,"  rail=%s;mag=%s;tilt=%s;half=%s\n",
  1186. X                words[rail], words[mag],words[tilt], words[half]));
  1187. X#endif
  1188. X
  1189. X#ifdef OPT
  1190. X            canoninsert(xpos, ypos, font, points, nc);
  1191. X#else
  1192. X            if (be->beputchar)
  1193. X                (*be->beputchar)(xpos, ypos, font, points, nc,
  1194. X                (char *) NULL);
  1195. X#endif
  1196. X
  1197. X            break;
  1198. X        /* Control codes */
  1199. X        case 0x40:
  1200. X            DBP((D_CAT,"Initialize\n"));
  1201. X            xpos = 0;
  1202. X            ypos = -153;
  1203. X            escape = FORWARD;
  1204. X            lead = FORWARD;
  1205. X            half = LOWER;
  1206. X            rail = LOWER;
  1207. X            mag = LOWER;
  1208. X            tilt = DOWN;
  1209. X            calcfont;
  1210. X            break;
  1211. X        case 0x41:
  1212. X            DBP((D_CAT,"Rail lower\n"));
  1213. X            rail = LOWER;
  1214. X            calcfont;
  1215. X            break;
  1216. X        case 0x42:
  1217. X            DBP((D_CAT,"Rail upper\n"));
  1218. X            rail = UPPER;
  1219. X            calcfont;
  1220. X            break;
  1221. X        case 0x43:
  1222. X            DBP((D_CAT,"Mag upper\n"));
  1223. X            mag = UPPER;
  1224. X            calcfont;
  1225. X            break;
  1226. X        case 0x44:
  1227. X            DBP((D_CAT,"Mag lower\n"));
  1228. X            mag = LOWER;
  1229. X            calcfont;
  1230. X            break;
  1231. X        case 0x45:
  1232. X            DBP((D_CAT,"half lower\n"));
  1233. X            half = LOWER;
  1234. X            break;
  1235. X        case 0x46:
  1236. X            DBP((D_CAT,"half upper\n"));
  1237. X            half = UPPER;
  1238. X            break;
  1239. X        case 0x47:
  1240. X            DBP((D_CAT,"Escape forward\n"));
  1241. X            escape = FORWARD;
  1242. X            break;
  1243. X        case 0x48:
  1244. X            DBP((D_CAT,"Escape backward\n"));
  1245. X            escape = BACKWARD;
  1246. X            break;
  1247. X        case 0x49:
  1248. X            DBP((D_CAT,"STOP\n"));
  1249. X            break;
  1250. X        case 0x4a:
  1251. X            DBP((D_CAT,"Lead forward\n"));
  1252. X            lead = FORWARD;
  1253. X            break;
  1254. X        case 0x4b:
  1255. X            DBP((D_CAT,"Software cut!\n"));
  1256. X            break;
  1257. X        case 0x4c:
  1258. X            DBP((D_CAT,"Lead backward\n"));
  1259. X            lead = BACKWARD;
  1260. X            break;
  1261. X        case 0x4d:
  1262. X#ifdef    SPECIAL
  1263. X#define    SPSIZ    256
  1264. X            {
  1265. X                static char specialbuf[SPSIZ], *sbp;
  1266. X                sbp = specialbuf;
  1267. X#ifdef    OPT
  1268. X                canonflush();
  1269. X#endif
  1270. X                while((c = getc(stdin)) != EOF && c != '\n') {
  1271. X                if (!c)    /* some troff's add NOP's when
  1272. X                       the internal output buffer is
  1273. X                       flushed */
  1274. X                    continue;
  1275. X                if (sbp < &specialbuf[SPSIZ]-2)
  1276. X                *sbp++ = c;
  1277. X                }
  1278. X                *sbp = '\0';
  1279. X
  1280. X                DBP((D_SPEC,"SPECIAL SEQUENCE: %s!\n", specialbuf));
  1281. X                dospecial(specialbuf);
  1282. X                break;
  1283. X            }
  1284. X#else
  1285. X            fprintf(stderr, "%s: Illegal C/A/T code - %s\n",
  1286. X                progname, "special sequences are disabled");
  1287. X            exit(1);
  1288. X#endif
  1289. X#ifdef    BSDHACK
  1290. X        case 0x4e:
  1291. X            magnify_lead = 1;
  1292. X            break;
  1293. X#endif
  1294. X#ifdef    FONT8
  1295. X        case 0x4e:
  1296. X            DBP((D_CAT,"Tilt up\n"));
  1297. X            tilt = UP;
  1298. X            calcfont;
  1299. X            break;
  1300. X        case 0x4f:
  1301. X            DBP((D_CAT,"Tilt down\n"));
  1302. X            tilt = DOWN;
  1303. X            calcfont;
  1304. X            break;
  1305. X#endif
  1306. X
  1307. X        /* Size changes */
  1308. X        case 0x50: case 0x51: case 0x52: case 0x53:
  1309. X        case 0x54: case 0x55: case 0x56: case 0x57:
  1310. X        case 0x58: case 0x59: case 0x5a: case 0x5b:
  1311. X        case 0x5c: case 0x5d: case 0x5e: case 0x5f:
  1312. X            /* basic code is the points = ptab[c] line.
  1313. X               The rest of the brain-damage is due to the
  1314. X               fact that switching from some of the fonts
  1315. X               to some of the others blow the horizontal
  1316. X               position - see the cat(5) manual page
  1317. X               about single vs. doubler point sizes. */
  1318. X            {    static lastc = 0;
  1319. X            c &= 0xf;
  1320. X            points = ptab[c];
  1321. X
  1322. X            DBP((D_CAT,"SPoints:%d;lastc:%5d;c:%d;xpos:%d\n",
  1323. X                points, lastc, c, xpos));
  1324. X            if (lastc <= 8 && c > 8) /* single -> doubler */
  1325. X                xpos -= 55;
  1326. X            else if (lastc > 8 && c <= 8) /* doubler -> single */
  1327. X                xpos += 55;
  1328. X
  1329. X            DBP((D_CAT,"EPoints:%d;lastc:%5d;c:%d;xpos:%d\n",
  1330. X                points, lastc, c, xpos));
  1331. X            lastc = c;
  1332. X            break;
  1333. X            }
  1334. X        /* Lead (vertical motion) codes */
  1335. X        case 0x60: case 0x61: case 0x62: case 0x63:
  1336. X        case 0x64: case 0x65: case 0x66: case 0x67:
  1337. X        case 0x68: case 0x69: case 0x6a: case 0x6b:
  1338. X        case 0x6c: case 0x6d: case 0x6e: case 0x6f:
  1339. X        case 0x70: case 0x71: case 0x72: case 0x73:
  1340. X        case 0x74: case 0x75: case 0x76: case 0x77:
  1341. X        case 0x78: case 0x79: case 0x7a: case 0x7b:
  1342. X        case 0x7c: case 0x7d: case 0x7e: case 0x7f:
  1343. X
  1344. X#ifdef    OPT
  1345. X            canonflush();
  1346. X#endif
  1347. X
  1348. X            DBP((D_CAT,"Lead(vertical) %02x\n", c&0x1f));
  1349. X            units = CTOINT(c,0x1f);
  1350. X#ifdef    BSDHACK
  1351. X            if (magnify_lead) {
  1352. X                units *= 64;
  1353. X                magnify_lead = 0;
  1354. X            }
  1355. X#endif
  1356. X            if (lead == FORWARD)
  1357. X                ypos += 3*units;
  1358. X            else
  1359. X                ypos -= 3*units;
  1360. X            break;
  1361. X        /* Escape (horizontal motion) codes */
  1362. X        case 0x80: case 0x81: case 0x82: case 0x83:
  1363. X#ifndef lint
  1364. X        case 0x84: case 0x85: case 0x86: case 0x87:
  1365. X        case 0x88: case 0x89: case 0x8a: case 0x8b:
  1366. X        case 0x8c: case 0x8d: case 0x8e: case 0x8f:
  1367. X        case 0x90: case 0x91: case 0x92: case 0x93:
  1368. X        case 0x94: case 0x95: case 0x96: case 0x97:
  1369. X        case 0x98: case 0x99: case 0x9a: case 0x9b:
  1370. X        case 0x9c: case 0x9d: case 0x9e: case 0x9f:
  1371. X        case 0xa0: case 0xa1: case 0xa2: case 0xa3:
  1372. X        case 0xa4: case 0xa5: case 0xa6: case 0xa7:
  1373. X        case 0xa8: case 0xa9: case 0xaa: case 0xab:
  1374. X        case 0xac: case 0xad: case 0xae: case 0xaf:
  1375. X        case 0xb0: case 0xb1: case 0xb2: case 0xb3:
  1376. X        case 0xb4: case 0xb5: case 0xb6: case 0xb7:
  1377. X        case 0xb8: case 0xb9: case 0xba: case 0xbb:
  1378. X        case 0xbc: case 0xbd: case 0xbe: case 0xbf:
  1379. X        case 0xc0: case 0xc1: case 0xc2: case 0xc3:
  1380. X        case 0xc4: case 0xc5: case 0xc6: case 0xc7:
  1381. X        case 0xc8: case 0xc9: case 0xca: case 0xcb:
  1382. X        case 0xcc: case 0xcd: case 0xce: case 0xcf:
  1383. X        case 0xd0: case 0xd1: case 0xd2: case 0xd3:
  1384. X        case 0xd4: case 0xd5: case 0xd6: case 0xd7:
  1385. X        case 0xd8: case 0xd9: case 0xda: case 0xdb:
  1386. X        case 0xdc: case 0xdd: case 0xde: case 0xdf:
  1387. X        case 0xe0: case 0xe1: case 0xe2: case 0xe3:
  1388. X        case 0xe4: case 0xe5: case 0xe6: case 0xe7:
  1389. X        case 0xe8: case 0xe9: case 0xea: case 0xeb:
  1390. X        case 0xec: case 0xed: case 0xee: case 0xef:
  1391. X        case 0xf0: case 0xf1: case 0xf2: case 0xf3:
  1392. X        case 0xf4: case 0xf5: case 0xf6: case 0xf7:
  1393. X        case 0xf8: case 0xf9: case 0xfa: case 0xfb:
  1394. X        case 0xfc: case 0xfd: case 0xfe:
  1395. X#endif
  1396. X
  1397. X            units = CTOINT(c,0x7f);
  1398. X            if (escape == FORWARD)
  1399. X                xpos += units;
  1400. X            else
  1401. X                xpos -= units;
  1402. X            DBP((D_CAT,"ESC (hor): %02x\n", c&0x7f));
  1403. X            break;
  1404. X
  1405. X        case 0xff:
  1406. X            DBP((D_CAT,"Illegal: %02x\n", c));
  1407. X            break;
  1408. X        }
  1409. X    }
  1410. X#ifdef    OPT
  1411. X    canonflush();
  1412. X#endif
  1413. X    if (be->bepage)
  1414. X        (*be->bepage)();
  1415. X    if (be->beepilog)
  1416. X        (*be->beepilog) ();
  1417. X    exit(0);
  1418. X    /* NOTREACHED */
  1419. X}
  1420. X
  1421. Xusage() {
  1422. X    fprintf(stderr, "usage: %s [-Ttype][-V]\n", progname);
  1423. X    fprintf(stderr, "  ... see troff2ps manpage for full description of %s\n",
  1424. X    OPTLIST);
  1425. X}
  1426. X
  1427. Xdouble
  1428. Xcalc(s)
  1429. Xregister char *s; {
  1430. X    double retval = 0.0;
  1431. X    char scale;
  1432. X    switch (sscanf(s, "%lf%c", &retval, &scale)) {
  1433. X    case 0:
  1434. X    case EOF:
  1435. X        retval = 0.0;
  1436. X    case 1:
  1437. X        retval *= TROFFRESOLUTION; /* default is inches */
  1438. X        break;
  1439. X    case 2:
  1440. X        switch(scale) {
  1441. X        default:
  1442. X            fprintf(stderr, "%s: bad scale %c\n", progname, scale);
  1443. X            retval = 0.0;
  1444. X        case 'i':
  1445. X            retval *= TROFFRESOLUTION;
  1446. X        case 'u':
  1447. X            break;
  1448. X        case 'c':
  1449. X            retval *= TROFFRESOLUTION * 50. / 127.;
  1450. X            break;
  1451. X        case 'p':
  1452. X            retval *= 6.;    /* points */
  1453. X            break;
  1454. X        case 'P':
  1455. X            retval *= 72.;    /* Picas */
  1456. X            break;
  1457. X        }
  1458. X        break;
  1459. X    }
  1460. X    return(retval);
  1461. X}
  1462. X
  1463. X#ifdef    SPECIAL
  1464. X
  1465. Xdospecial(string)
  1466. Xchar *string; {
  1467. X    char buffer[512];
  1468. X    register struct cattab *p;
  1469. X    extern struct cattab *ditsearch();
  1470. X
  1471. X    buffer[0] = '\0';
  1472. X
  1473. X    DBP((D_SPEC,"Dospecial: (%d) %s\n", strlen(string), string));
  1474. X    while (*string)
  1475. X    switch(*string) {
  1476. X        case 'D': {
  1477. X        short values[100];
  1478. X        int opcode, ct, newx, newy, i;
  1479. X
  1480. X        if (!(opcode = drawparse(&ct, values, &string[1])))
  1481. X            break;
  1482. X        newx = specXPos;
  1483. X        newy = specYPos;
  1484. X        if (opcode == 'e' || opcode == 'E')
  1485. X            newx += values[0];
  1486. X        else if (opcode != 't' && opcode != 'f') {
  1487. X            for (i = 0; i < ct/2; i++) {
  1488. X            newx += values[i*2];
  1489. X            newy += values[i*2+1];
  1490. X            }
  1491. X            if (i*2 < ct)
  1492. X            newx += values[i*2];
  1493. X        }
  1494. X
  1495. XDBP((D_CAT, "Draw: xpos,ypos,opcode,ct,special = %d,%d,%d,%d,%s\n",
  1496. X    xpos, ypos, opcode, ct, string));
  1497. X
  1498. X        if (be->bedraw)
  1499. X            (be->bedraw)(specXPos, specYPos, opcode, ct, values,
  1500. X            string);
  1501. X        specXPos = newx;
  1502. X        specYPos = newy;
  1503. X        *string = '\0';
  1504. X        return;
  1505. X        }
  1506. X        case 'C':
  1507. X
  1508. X        if (extcount && !spctab)
  1509. X            fixtab();
  1510. X
  1511. X        string++;
  1512. X        if (strlen(string) == 1)
  1513. X            p = dittab[(*string)&0xff];
  1514. X        else
  1515. X            p = ditsearch(string);
  1516. X
  1517. X        if (!p) {
  1518. X            fprintf(stderr,
  1519. X            "%s: don't know this character: %s\n", progname,
  1520. X            string);
  1521. X            if (be->beputchar)
  1522. X            (*be->beputchar)(specXPos, specYPos, font, points, 0,
  1523. X                string);
  1524. X        } else {
  1525. X            if (be->beputchar) {
  1526. X            if (p->ch_wididx == NTC) /* extended character */
  1527. X                (be->beputchar)(specXPos, specYPos,
  1528. X                p->ch_set == N ? -font-1: -symidx-1,
  1529. X                points, p->ch_catidx,
  1530. X                extchars[p->ch_catidx].t2b_charseq);
  1531. X            else
  1532. X                (be->beputchar)(specXPos, specYPos,
  1533. X                p->ch_set == N ? font: symidx,
  1534. X                points, p->ch_catidx, (char *) NULL);
  1535. X            }
  1536. X        }
  1537. X
  1538. X        *string = '\0';
  1539. X        return;
  1540. X
  1541. X        case 'E':
  1542. X        fprintf(stderr, "%s\n", string+1);
  1543. X        *string = '\0';
  1544. X        return;
  1545. X
  1546. X        case 'p':
  1547. X        case 'P':
  1548. X        if (be->bedraw)
  1549. X            (*be->bedraw)(specXPos, specYPos, NULL);
  1550. X        if (be->bepassthru)
  1551. X            (*be->bepassthru)(string+1);
  1552. X        else
  1553. X            printf("%s\n", string+1);
  1554. X        /* reset driver state! */
  1555. X        resetState();
  1556. X        *string = '\0';
  1557. X        return;
  1558. X
  1559. X        case 'S':
  1560. X        system(string+1);
  1561. X        /* reset driver state! */
  1562. X        resetState();
  1563. X        *string = '\0';
  1564. X        return;
  1565. X
  1566. X        case 'F':
  1567. X        if (be->befontsel)
  1568. X            (*be->befontsel)(*(string+1), string+2);
  1569. X        *string ='\0';
  1570. X        return;
  1571. X#ifdef    FORM
  1572. X        case 'L':
  1573. X        strcpy(buffer+2, string+1);
  1574. X        buffer[1] = '+';
  1575. X        *string = '\0';
  1576. X        string = buffer;
  1577. X        case 'O':
  1578. X        if (be->beoverlay)
  1579. X            (*be->beoverlay)(string+1);
  1580. X        *string = '\0';
  1581. X        return;
  1582. X#endif
  1583. X        case 'i':
  1584. X        strcpy(buffer, "b");
  1585. X
  1586. X        case 'f':
  1587. X        case 'I':
  1588. X        strcat(buffer, "include ");
  1589. X        strcat(buffer, string+1);
  1590. X        interp(buffer, (be->bexlat && *string == 'F') ? be->bexlat:
  1591. X            FNULL, driver);
  1592. X        return;
  1593. X
  1594. X        default:
  1595. X        fprintf(stderr, "%s: Illegal special sequence %s\n", progname, string);
  1596. X        return;
  1597. X    }
  1598. X}
  1599. X
  1600. X#endif
  1601. END_OF_FILE
  1602.   if test 17179 -ne `wc -c <'troff2.c'`; then
  1603.     echo shar: \"'troff2.c'\" unpacked with wrong size!
  1604.   fi
  1605.   # end of 'troff2.c'
  1606. fi
  1607. if test -f 'widths/genext.S' -a "${1}" != "-c" ; then 
  1608.   echo shar: Will not clobber existing file \"'widths/genext.S'\"
  1609. else
  1610.   echo shar: Extracting \"'widths/genext.S'\" \(1534 characters\)
  1611.   sed "s/^X//" >'widths/genext.S' <<'END_OF_FILE'
  1612. X%%STARTSHELL%%
  1613. X#    Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 Chris Lewis
  1614. X#        All Rights Reserved
  1615. X#
  1616. X#    See the LICENSE file for a full description of the restrictions
  1617. X#    under which this software is provided.
  1618. X#
  1619. X#    2.6 91/03/10 Generate extension list of characters for troff2ps.
  1620. Xif [ $# != 1 ]
  1621. Xthen
  1622. X    echo "usage: genext <ditroff font width directory>" >&2
  1623. X    exit 1
  1624. Xfi
  1625. Xwidthdir=$1
  1626. Xif [ ! -d $widthdir ]
  1627. Xthen
  1628. X    echo "genext: $widthdir not a directory"
  1629. X    exit 1
  1630. Xfi
  1631. Xa=`ls $widthdir/? 2> /dev/null`
  1632. Xif [ -n "$a" ]
  1633. Xthen
  1634. X    files=$a
  1635. Xfi
  1636. Xa=`ls $widthdir/?? 2> /dev/null`
  1637. Xif [ -n "$a" ]
  1638. Xthen
  1639. X    files="$files $a"
  1640. Xfi
  1641. Xif [ -z "$files" ]
  1642. Xthen
  1643. X    echo "genext: No width tables in $widthdir"
  1644. X    exit 0
  1645. Xfi
  1646. X
  1647. Xawk '
  1648. X    BEGIN {
  1649. X    state = 0
  1650. X    seen["BLOT"] = 1
  1651. X    }
  1652. X
  1653. X$1 ~ /^{"/ {
  1654. X    i = length($1) - 3 - 1
  1655. X    ch = substr($1, 3, i)
  1656. X    if (ch ~ /^\\/)
  1657. X        ch = substr(ch, 2)
  1658. X    catcodes[ch] = 1
  1659. X    next
  1660. X    }
  1661. X$1 ~ /^name/ {
  1662. X    curfont = $2
  1663. X    next
  1664. X    }
  1665. X/faked/    { next }
  1666. XNF >= 4 && $2 ~ /^[0-9]*$/ && $3 ~ /^[0-9]*$/    {
  1667. X    if (catcodes[$1] || $1 == "\\|" || $1 == "\\^")
  1668. X        next
  1669. X    if (seen[$1]) {
  1670. X        if (seen[$1] != $4)
  1671. X        printf "Duplicate %s, but different codes! (%s/%s)\n", \
  1672. X            $1, seen[$1], $4 > "/tmp/errors"
  1673. X        next
  1674. X    }
  1675. X    seen[$1] = $4
  1676. X    if (curfont == "S")
  1677. X        flag = "S"
  1678. X    else if (curfont == "S2")
  1679. X        flag = 4
  1680. X    else
  1681. X        flag = "N"
  1682. X    code = $4
  1683. X    if (length(code) > 3)
  1684. X        code = substr(code, length(code) - 2, 3)
  1685. X    while(length(code) < 3) {
  1686. X        code = "0" code
  1687. X    }
  1688. X    printf("%s    %s    \\%s\n", $1, flag, code)
  1689. X    }
  1690. X
  1691. X' ../utils/ljtab.c $files
  1692. END_OF_FILE
  1693.   if test 1534 -ne `wc -c <'widths/genext.S'`; then
  1694.     echo shar: \"'widths/genext.S'\" unpacked with wrong size!
  1695.   fi
  1696.   # end of 'widths/genext.S'
  1697. fi
  1698. echo shar: End of archive 5 \(of 19\).
  1699. cp /dev/null ark5isdone
  1700. MISSING=""
  1701. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do
  1702.     if test ! -f ark${I}isdone ; then
  1703.     MISSING="${MISSING} ${I}"
  1704.     fi
  1705. done
  1706. if test "${MISSING}" = "" ; then
  1707.     echo You have unpacked all 19 archives.
  1708.     echo "Read the README to get started with psroff installation"
  1709.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1710. else
  1711.     echo You still must unpack the following archives:
  1712.     echo "        " ${MISSING}
  1713. fi
  1714. exit 0
  1715.  
  1716. exit 0 # Just in case...
  1717.